浏览器是怎么解析 HTML 文档的?
浏览器解析 HTML 文档的过程是一个复杂的过程,涉及多个阶段,主要分为以下几个步骤:
1. 接收 HTML 文件
- 浏览器通过发送 HTTP 请求获取服务器返回的 HTML 文件。该文件可能会包含外部资源(如 CSS、JavaScript、图片等),浏览器会逐步处理这些内容。
2. 构建 DOM 树
- 词法分析(Tokenization):浏览器开始解析 HTML 文档时,将 HTML 源代码拆分为一系列的“标记”或“词法单元”(tokens)。这些标记对应 HTML 标签、属性和文本。
- 构建 DOM 树(Document Object Model):浏览器根据这些标记构建一个 DOM 树。DOM 树的每个节点代表 HTML 文档的一个元素(如
<div>
、<p>
)或文本内容,形成一个层次结构。 - 节点顺序:解析 HTML 文档时,浏览器会根据标签的嵌套关系将它们组织成树状结构。例如,
<html>
元素是根节点,<head>
和<body>
是其子节点,等等。
3. 解析 CSS(样式处理)
- 在构建 DOM 树的同时,浏览器会遇到
<style>
标签或者外部 CSS 文件的链接(如<link rel="stylesheet">
),浏览器会下载并解析这些 CSS 规则。 - 浏览器将 CSS 规则应用到相应的 DOM 节点,生成 CSSOM 树(CSS Object Model),它表示页面上所有样式的结构。
- 通过将 DOM 树和 CSSOM 树结合,生成 渲染树(Render Tree),它包含了页面中所有可见元素的样式信息。
4. 生成渲染树
- 渲染树由 DOM 树和 CSSOM 树组合而成,包含了页面中所有需要呈现的元素以及它们的样式信息。
- 渲染树不包括像
<head>
标签或隐藏元素(例如display: none
的元素),只有可见的元素和它们的样式才会被包含在内。 - 例如,一个
<div>
元素的渲染树节点会包含该div
的位置、大小、颜色等样式信息。
5. 布局(Layout / Reflow)
- 布局阶段:浏览器通过渲染树来确定每个元素的准确位置和大小。浏览器计算每个元素的几何位置,得到每个元素在页面上的精确位置。
- 如果布局发生了改变(例如窗口尺寸变化,或者某个元素的尺寸改变),浏览器需要重新计算布局,这个过程叫做 重排(Reflow)。
6. 绘制(Paint)
- 绘制阶段:浏览器会将布局好的元素按照样式规则渲染到屏幕上,绘制每个元素的颜色、边框、阴影等外观。这个过程称为 绘制(Paint)。
- 例如,浏览器会绘制元素的背景色、文本、边框等,生成最终的页面显示内容。