2026-10-22 22:19:50
关键渲染路径(Critical Rendering Path)是浏览器将HTML、CSS和JavaScript转换为实际可见网页所必须经历的一系列步骤,其核心流程包括构建DOM树、CSSOM树、渲染树,进行布局和绘制。以下是具体过程及优化策略:
一、关键渲染路径的核心步骤构建DOM树
过程:
字符解析:浏览器解析HTML文件中的标签(如<html>、<p>)。
令牌生成:通过令牌生成器将标签转换为令牌(如<p>hello</p>生成StartTag:p、hello、EndTag:p)。
节点构建:消耗令牌生成树结构,形成DOM(文档对象模型),包含所有HTML内容、属性及节点关系。

特点:令牌生成与节点构建同步进行,无需等待所有令牌生成。
构建CSSOM树
过程:与DOM树类似,经历字符解析、令牌生成、节点构建,最终形成CSSOM(层叠样式表对象模型)。
关键规则:
CSS标记规则与HTML不同,且支持样式继承(父级样式自动应用于子级)。
阻塞渲染:浏览器需等待CSSOM构建完成才会开始渲染页面。
生成渲染树
过程:结合DOM和CSSOM,复制可见元素的DOM节点及其CSS属性到渲染树。
特殊处理:
跳过display:none的元素及其子项。
移除<head>中不可见内容(如<meta>、<title>)。

布局(Layout/Reflow)
根据渲染树计算元素在页面中的位置和尺寸(如宽度、高度、边距)。
绘制(Painting)
将布局结果转换为像素,最终呈现网页。
执行时机
遇到JS代码时,浏览器会暂停HTML解析,直到JS执行完毕。
依赖关系:若CSSOM未完成,JS会等待CSSOM构建后再执行。
资源预加载
浏览器通过预加载扫描程序发现CSS和JS资源并同步下载,避免单个资源加载的等待时间。
阻塞影响
JS执行期间,CSSOM未完成会导致短暂阻塞。
多个JS文件加载时,浏览器会并行下载其他资源,但执行仍按顺序进行。
缩短路径长度
内联CSS:将关键CSS直接写入HTML文件,减少CSS加载的往返时间(RTT)。
示例:关键路径长度从2(外联CSS)缩短为1(内联CSS)。
减少外联资源:合并CSS/JS文件,减少HTTP请求。
减少关键资源数
按需加载:非关键CSS/JS通过异步加载(如async/defer)或媒体查询(media="print")延迟加载。
代码分割:将JS拆分为多个小文件,按需加载。
压缩关键字节数
压缩代码:使用工具(如UglifyJS、CSSNano)压缩HTML/CSS/JS。
启用缓存:通过HTTP缓存头(如Cache-Control)复用已下载资源。
消除阻塞
CSS优化:
使用媒体查询限制CSS作用范围(如media="only screen and (min-width: 600px)")。
内联关键CSS,非关键CSS异步加载。
JS优化:
添加defer属性延迟执行(如<script defer src="...">)。
使用async属性异步加载不操作DOM的脚本(如监控脚本)。
通过优化关键渲染路径,可显著提升页面加载速度,改善用户体验。