Skip to content
目录

13 — 页面渲染全链路 ​

里可以把页面渲染拆成两条线:导航到文档,以及 文档到像素。

导航到文档 ​

  1. 用户输入 URL、点击链接或脚本触发导航。
  2. Browser 进程创建和管理导航状态。
  3. 通过 Network Service 获取资源,处理重定向、CSP、CORS、ORB 等策略。
  4. Browser 选择合适的 SiteInstance 和 Renderer 进程。
  5. Renderer 收到提交信息,Blink 开始解析 HTML、CSS、执行 JS。

首屏速度同时受网络、Renderer 主线程、资源加载和首帧光栅影响。

文档到像素 ​

Renderer 侧主路径:

  1. HTML 解析成 DOM。
  2. CSS 解析并计算样式。
  3. Layout 计算位置和尺寸。
  4. Paint 生成绘制记录。
  5. cc 组织图层、tile 和光栅任务。
  6. 生成 CompositorFrame。
  7. viz 聚合帧,GPU 提交显示。

一帧的大致流程 ​

  1. vsync 触发 BeginFrame。
  2. 如果只是滚动或合成动画,可能直接在合成线程更新。
  3. 如果有 DOM / 样式 / 布局变化,进入 Renderer 主线程。
  4. 主线程完成样式、布局、绘制后 Commit 给合成线程。
  5. Pending 树光栅完成后 Activate 成 Active 树。
  6. 提交 CompositorFrame。
  7. viz 聚合并显示。

为什么有时主线程忙但还能滚 ​

如果滚动可以在合成线程完成,浏览器可以用已有 active 树响应滚动,不必每帧等 Blink 主线程。

但如果页面注册了同步 wheel / touch 监听,或滚动依赖主线程计算,就可能被主线程长任务卡住。

总结 ​

页面渲染从 Browser 管导航开始,到 Renderer 解析和布局,再到 cc / viz / GPU 合成显示。性能问题要分清是网络慢、主线程忙、光栅慢、合成慢,还是 GPU 提交慢。

MIT License.