Open nfssuzukaze opened 4 years ago
影响 web 性能的主要原因:
浏览器每次处理 HTML 标记时, 都会完成以下步骤:
W3C HTML5 标准
整个流程需要一些时间才能完成, 有大量 HTML 需要处理时更是如此
由于当遇到 CSS 文件时, 会新开一个进程, 使得 CSS 的解析和 HTML 的解析可以同时进行, 所以将 CSS 独立于 HTML 不仅有利于将内容和设计作为独立关注点进行处理, 还相比于将 CSS 代码写在 HTML 标记内的加载速度更快 CSSOM 的构造与 DOM 的构造过程相似: 转换 --> 令牌化 --> 词法分析 --> CSSOM 构建
至此, 浏览器已经计算了哪些节点应该是可见的以及它们的计算样式, 但是尚未计算它们在设备视口内的确切位置和大小, 这就是接下来的布局工作
布局(Layout) 为弄清楚每个对象在网页上的确切大小和位置, 浏览器从渲染树的根节点开始进行遍历 布局流程的输出是一个 "盒模型", 它会精确地捕获每个元素视口内的确切位置和尺寸, 将所有的测量值转换为屏幕上的绝对像素 最后, 将得出的信息传递给最后一个阶段: 绘制
绘制(Paint) 布局完成后, 浏览器会立即发出 "paint" 事件, 将渲染树转换为屏幕上的像素
注意: 如果 DOM 或 CSSOM 被修改, 便只能再执行一次上面的步骤 如果能最大限度缩短执行上述 1~5 步的时间, 就能尽快将内容渲染到屏幕上, 此外还能缩短首次渲染后屏幕刷新的时间
浏览器渲染原理
影响 web 性能的主要原因:
当浏览器获得 HTML 文件时
1. 构建文档对象模型(DOM)
浏览器每次处理 HTML 标记时, 都会完成以下步骤:
W3C HTML5 标准
规定的各种令牌整个流程需要一些时间才能完成, 有大量 HTML 需要处理时更是如此
2. 构建 CSS 对象模型(CSSOM)
由于当遇到 CSS 文件时, 会新开一个进程, 使得 CSS 的解析和 HTML 的解析可以同时进行, 所以将 CSS 独立于 HTML 不仅有利于将内容和设计作为独立关注点进行处理, 还相比于将 CSS 代码写在 HTML 标记内的加载速度更快 CSSOM 的构造与 DOM 的构造过程相似: 转换 --> 令牌化 --> 词法分析 --> CSSOM 构建
3. 构建渲染树, 布局及绘制
至此, 浏览器已经计算了哪些节点应该是可见的以及它们的计算样式, 但是尚未计算它们在设备视口内的确切位置和大小, 这就是接下来的布局工作
布局(Layout) 为弄清楚每个对象在网页上的确切大小和位置, 浏览器从渲染树的根节点开始进行遍历 布局流程的输出是一个 "盒模型", 它会精确地捕获每个元素视口内的确切位置和尺寸, 将所有的测量值转换为屏幕上的绝对像素 最后, 将得出的信息传递给最后一个阶段: 绘制
绘制(Paint) 布局完成后, 浏览器会立即发出 "paint" 事件, 将渲染树转换为屏幕上的像素
4. 浏览器渲染过程简述:
注意: 如果 DOM 或 CSSOM 被修改, 便只能再执行一次上面的步骤 如果能最大限度缩短执行上述 1~5 步的时间, 就能尽快将内容渲染到屏幕上, 此外还能缩短首次渲染后屏幕刷新的时间