首页
/ Google Chrome/web.dev 项目解析:关键渲染路径之对象模型构建

Google Chrome/web.dev 项目解析:关键渲染路径之对象模型构建

2025-07-09 06:13:39作者:昌雅子Ethen

前言

在浏览器渲染页面的过程中,构建DOM和CSSOM树是至关重要的前置步骤。本文将深入解析浏览器如何将HTML和CSS转换为可操作的对象模型,帮助开发者理解这一关键渲染路径的核心机制。

对象模型构建流程概述

浏览器处理HTML和CSS的过程可以概括为以下阶段:

  1. 字节 → 字符 → 标记 → 节点 → 对象模型
  2. HTML标记转换为文档对象模型(DOM)
  3. CSS标记转换为CSS对象模型(CSSOM)
  4. DOM和CSSOM是独立的数据结构

文档对象模型(DOM)构建详解

示例HTML文档

<!DOCTYPE html>
<html>
  <head>
    <meta name="viewport" content="width=device-width,initial-scale=1" />
    <link href="style.css" rel="stylesheet" />
    <title>Critical Path</title>
  </head>
  <body>
    <p>Hello <span>web performance</span> students!</p>
    <div><img src="awesome-photo.jpg" /></div>
  </body>
</html>

DOM构建四步曲

  1. 转换(Conversion)

    • 浏览器从磁盘或网络读取HTML原始字节
    • 根据文件编码规范(如UTF-8)将字节转换为字符
  2. 标记化(Tokenizing)

    • 将字符流转换为有意义的标记
    • 根据W3C HTML5标准识别""、""等标签
  3. 词法分析(Lexing)

    • 将标记转换为定义其属性和规则的对象
  4. DOM构建

    • 根据HTML标记定义的父子关系
    • 将对象链接成树形数据结构
    • 例如:HTML对象是body对象的父级,body是段落对象的父级等

DOM树结构示例

最终构建的DOM树反映了文档标记的属性和关系,浏览器后续处理都基于这个DOM树。

性能考量

DOM构建过程需要时间,特别是处理大量HTML时:

  • 示例中约5ms完成转换
  • 大型页面可能需要更长时间
  • 在动画场景中可能成为性能瓶颈

CSS对象模型(CSSOM)构建

当浏览器构建DOM时遇到CSS链接,会立即请求该资源:

body {
  font-size: 16px;
}
p {
  font-weight: bold;
}
span {
  color: red;
}
p span {
  display: none;
}
img {
  float: right;
}

CSS处理流程

与HTML类似但针对CSS:

  1. CSS字节转换为字符
  2. 字符转换为标记
  3. 标记转换为节点
  4. 节点链接成CSSOM树结构

CSSOM树特性

  1. 层级结构原因:浏览器计算元素最终样式时,从最通用规则开始,递归应用更具体规则(层叠)
  2. 示例说明
    • body内的span文本:16px字体、红色
    • p内的span:内容不显示
  3. 默认样式:浏览器提供"用户代理样式",我们的样式会覆盖这些默认值

性能监测

通过开发者工具可以观察到:

  • "Recalculate Style"事件包含解析和CSSOM树构建
  • 示例样式表处理约0.6ms,影响8个元素

DOM与CSSOM的关系

虽然DOM和CSSOM是独立构建的,但浏览器会在两者之间建立关联,形成渲染树。这个关键步骤将视觉样式与文档结构结合起来,为最终页面渲染做准备。

总结

理解DOM和CSSOM的构建过程对于优化网页性能至关重要。通过开发者工具监测这些过程,开发者可以识别潜在的性能瓶颈,并采取相应优化措施,如:

  • 精简HTML和CSS
  • 减少嵌套层级
  • 合理组织样式规则
  • 避免阻塞渲染的关键资源

掌握这些基础知识,将帮助开发者构建更高效、响应更快的网页应用。