从收到 HTML、CSS 和 JavaScript 字节到对其进行必需的处理,从而将它们转变成渲染的像素这一过程当中有一些中间步骤css
浏览器渲染页面前须要先构建 DOM 和 CSSOM 树。所以,咱们须要确保尽快将 HTML 和 CSS 都提供给浏览器。浏览器
DOM 树与 CSSOM 树合并后造成渲染树。缓存
有了渲染树,咱们就能够进入“布局”阶段。服务器
布局完成后,浏览器会当即发出“Paint Setup”和“Paint”事件,将渲染树转换成屏幕上的像素。框架
默认状况下,CSS 被视为阻塞渲染的资源,这意味着浏览器将不会渲染任何已处理的内容,直至 CSSOM 构建完毕。请务必精简您的 CSS,尽快提供它,并利用媒体类型和查询来解除对渲染的阻塞。异步
CSS 是阻塞渲染的资源。须要将它尽早、尽快地下载到客户端,以便缩短首次渲染的时间。async
为何script标签要放在底部?
咱们的脚本在文档的何处插入,就在何处执行。当 HTML 解析器遇到一个 script 标记时,它会暂停构建 DOM,将控制权移交给 JavaScript 引擎;等 JavaScript 引擎运行完毕,浏览器会从中断的地方恢复 DOM 构建。布局
若是浏览器还没有完成 CSSOM 的下载和构建,而咱们却想在此时运行脚本,会怎样?性能
JavaScript 执行将暂停,直至 CSSOM 就绪。优化
阻止解析器
若是是外部 JavaScript 文件,浏览器必须停下来,等待从磁盘、缓存或远程服务器获取脚本,这就可能给关键渲染路径增长数十至数千毫秒的延迟