浏览器多进程模型
Chromium 的渲染流程
-
请求 HTML
-
HTML Parser
HTML Parser 有如下作用
- 解析 HTML 生成 DOM
- 预加载扫描器(Preload Scanner)扫描 HTML 中引入的外部资源(link、img、source、video、audio),提前请求外部资源
不同的标签有不同的处理方式
- link:加载外部资源,不阻塞 HTML Parser
- script:又需要区分
- 无 async 和 defer:阻塞 HTML Parser,等待 script 下载完毕后立即执行 script,执行完毕后继续 HTML Parser
- async:不阻塞 HTML Parser,等待 script 下载完毕后才执行 script,中断 HTML Parser,script 执行完毕后继续 HTML Parser
- defer:不阻塞 HTML Parser,等待 script 下载完毕后,在 HTML Parser 后、在 DOMContentLoaded 前执行 script
-
StyleSheet Parser:解析 CSS,生成 CSSOM(CSS Object Model),如果存在多个 CSS,则遵循 CSS 层叠规则,合并到同一个 CSSOM
-
Render Tree:合并 DOM 和 CSSOM,构造 Render Tree
例如
- display:不会进入 Render Tree;visibility: hidden:会进入 Render Tree
-
Layout:布局,遍历 Render Tree,计算各个节点的盒模型、位置、层级等
-
Paint:绘制,生成绘制指令
-
Layerize:分层,将 Render Tree 拆分为多个合成层
例如如下情况会创建新的合成层
- opacity
- transform 3D
- position: fixed
-
Tiling:分块,将每个合成层切割为小块,易于并行绘制,且可以只绘制可视区域内
-
Raster:光栅化,将绘制指令转换为像素
-
Composite:合成,GPU 合成显示