客户端容器 web浏览器及其跨端方案
关键问题:浏览器是如何运行的?
浏览器架构:单继承架构 => 多进程架构 => 面向服务架构(把与资源打交道的部分抽象成不同的服务)
面向服务架构的出现旨在将浏览器的各个功能模块化,将它们作为独立的服务来运行和维护。在这种架构下,每个服务都可以独立地使用一个或多个进程,根据需求自动扩展或缩减资源
渲染进程(一个tab页)
JS引擎与渲染引擎:
渲染进程多线程工作流程:
- 网路线程负责加载网页资源
- JS引擎解析JS脚本并执行
- JS引擎空闲时,渲染引擎立刻工作
- 用户交互、定时器操作等产生回调函数放入任务队列中
- 事件线程进行事件循环,将队列里的任务取出交给JS引擎执行
JS引擎与渲染引擎之间通信通常通过浏览器内部的API和事件机制实现:
JS引擎提供了DOM API,使得js代码可以访问和操作DOM树。当js代码需要对DOM树进行操作时(如添加、删除或修改节点),JS引擎会通过浏览器内部的API通知渲染引擎进行相应的操作
渲染树是DOM树和CSSOM树的结合
页面布局
- 根据渲染树计算每个节点的位置和大小
- 在浏览器页面区域绘制元素边框
- 遍历渲染树,将元素以盒模型的形式写入文档流
页面绘制
- 构建图层:为特定节点生成专用图层
- 绘制图层:一个图层分成很多绘制指令,然后将这些指令按顺序组成一个绘制列表,交给合成线程
- 合成线程接受指令生成图块
- 栅格线程将图块栅格化(GPU加速)
- 展示在屏幕上