You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
由于浏览器不了解脚本计划在页面上执行什么操作,它会作最坏的假设并阻止解析器。当 HTML 解析器遇到一个 script 标记时,它会暂停构建 DOM,将控制权移交给 JavaScript 引擎;等 JavaScript 引擎运行完毕,浏览器会从中断的地方恢复 DOM 构建。因此,执行内联脚本会阻止 DOM 构建,也就延缓了首次渲染
另外,由于JS可以读取和修改CSSOM属性
如果浏览器尚未完成 CSSOM 的下载和构建,这时遇到了脚本需要运行,浏览器将延迟脚本执行和 DOM 构建,直至其完成 CSSOM 的下载和构建
优化关键渲染路径能够让浏览器尽可能快地绘制网页:更快的网页渲染速度可以提高吸引力、增加网页浏览量以及提高转化率。为了最大程度减少访客看到空白屏幕的时间,我们需要优化加载的资源及其加载顺序。
分析关键渲染路径性能 | Web | Google Developers
渲染树构建、布局及绘制
DOMContentLoaded
事件优化关键渲染路径_就是指最大限度缩短执行上述第 1 步至第 5 步耗费的总时间。 这样一来,就能尽快将内容渲染到屏幕上,此外还能缩短首次渲染后屏幕刷新的时间,即为交互式内容实现更高的刷新率。
阻塞渲染的CSS
在渲染树构建中,HTML 和 CSS 都是阻塞渲染的资源,HTML 显然是必需的,因为如果没有 DOM,我们就没有可渲染的内容,但 CSS 的必要性可能就不太明显
几种引入CSS资源的方法,是否阻塞首次渲染
注意
<head>
,display: none的节点
设置了
visibility:hidden
的元素虽不可见,但仍然占有空间,仍会被添加到RenderTreerepaint(重绘):节点需要更改外观,但不改变布局和几何属性,就叫做重绘,比如color
JS对渲染的影响
JavaScript 可以查询和修改 DOM 与 CSSOM
由于浏览器不了解脚本计划在页面上执行什么操作,它会作最坏的假设并阻止解析器。当 HTML 解析器遇到一个 script 标记时,它会暂停构建 DOM,将控制权移交给 JavaScript 引擎;等 JavaScript 引擎运行完毕,浏览器会从中断的地方恢复 DOM 构建。因此,执行内联脚本会阻止 DOM 构建,也就延缓了首次渲染
另外,由于JS可以读取和修改CSSOM属性
如果浏览器尚未完成 CSSOM 的下载和构建,这时遇到了脚本需要运行,浏览器将延迟脚本执行和 DOM 构建,直至其完成 CSSOM 的下载和构建
如果是外部 JavaScript 文件,浏览器必须停下来,等待从磁盘、缓存或远程服务器获取脚本,这就可能给关键渲染路径增加数十至数千毫秒的延迟
所以可以通过标记外部JS文件为异步(async/defer),指示浏览器在等待脚本可用期间不阻止DOM构建
另外,对于执行时间过长的JS代码,可以考虑用
Web Worker
去处理,它不会操作DOM元素,只能做一些纯计算的工作JavaScript代码运行在浏览器的主线程上,但浏览器的主线程还负责样式计算、布局、绘制的工作,所以JS运行时间过长会阻塞其他渲染工作,导致丢帧,每帧的渲染应该在16ms内完成,而动画占据了不少时间,所以JS代码的运行消耗应该控制在3~4ms
其他资源的影响
构建渲染树甚至绘制网页时无需等待页面上的每个资产:并非所有资源都对快速提供首次绘制具有关键作用。
谈论关键渲染路径时,通常谈论的是 HTML 标记、CSS 和 JavaScript。图像不会阻止页面的首次渲染
优化关键渲染路径
为尽快完成首次渲染,我们需要最大限度减小以下三种可变因素:
优化关键渲染路径的常规步骤如下
PageSpeed 规则和建议
The text was updated successfully, but these errors were encountered: