当你在浏览器地址栏输入一个网址并按下回车,到最终看到完整的页面,这背后发生了一系列精密而复杂的步骤。理解这个过程,不仅能帮助你排查性能问题,还能让你对 Web 工作原理有更深刻的认知。本文将完整拆解从 URL 输入到页面渲染的每一个关键环节。
一、URL 解析与 DNS 查询
浏览器首先会解析你输入的 URL。一个完整的 URL 通常包含协议(如 https)、域名(如 example.com)、端口(默认 443 或 80)、路径和查询参数。浏览器会检查输入内容是否合法,并判断是否是一个搜索词——如果不是合法 URL,就会交给默认搜索引擎处理。
接下来是 DNS 查询。浏览器需要将域名转换为 IP 地址。它会依次检查:
- 浏览器 DNS 缓存
- 操作系统 DNS 缓存
- 本地 hosts 文件
- 向配置的 DNS 服务器发起递归查询
DNS 查询通常使用 UDP 协议,速度较快。如果域名解析失败,页面将无法加载。
二、建立 TCP 连接与 TLS 握手
拿到 IP 地址后,浏览器通过 三次握手 与服务器建立 TCP 连接:
- 客户端发送 SYN 包
- 服务器回复 SYN + ACK
- 客户端发送 ACK
如果是 HTTPS,还需要进行 TLS 握手。TLS 握手包括:
- 客户端发送支持的加密套件和随机数
- 服务器返回证书、选择的加密套件和随机数
- 客户端验证证书,生成预主密钥并用公钥加密发送
- 双方根据随机数生成会话密钥
TLS 握手通常需要 1-2 个 RTT(往返时间),这也是 HTTPS 比 HTTP 慢的主要原因之一。TLS 1.3 已经优化到 1-RTT,甚至支持 0-RTT 恢复。
三、发送 HTTP 请求与接收响应
连接建立后,浏览器构造 HTTP 请求报文,包括请求行(方法、路径、协议版本)、请求头(Host、User-Agent、Accept、Cookie 等)和请求体(如 POST 数据)。
服务器收到请求后,经过后端处理(可能涉及负载均衡、应用服务器、数据库查询等),返回 HTTP 响应,包含状态码(如 200、301、404)、响应头和响应体(通常是 HTML 文档)。
浏览器接收响应时,可能遇到重定向(3xx),此时会重新发起请求。如果响应启用了压缩(如 gzip、br),浏览器会先解压。
四、HTML 解析与 DOM 构建
拿到 HTML 后,浏览器开始 解析。这是一个增量过程:浏览器逐字节读取 HTML,通过词法分析和语法分析,构建 DOM 树(Document Object Model)。
解析过程中,遇到 <script> 标签会 阻塞 DOM 构建,因为脚本可能修改 DOM。因此通常建议将脚本放在底部或使用 defer / async。遇到 <link rel="stylesheet"> 会阻塞渲染,但不会阻塞 DOM 构建。
五、CSS 解析与 CSSOM 构建
浏览器同时解析 CSS(外部样式表、内联样式、行内样式),构建 CSSOM 树(CSS Object Model)。CSSOM 描述了每个节点的最终样式,包括继承和层叠规则。
CSS 是 渲染阻塞资源:浏览器必须等 CSSOM 构建完成后,才能进入渲染阶段。这也是为什么建议将关键 CSS 内联、非关键 CSS 异步加载。
六、构建渲染树与布局
DOM 树和 CSSOM 树结合后,生成 渲染树(Render Tree)。渲染树只包含可见节点——display: none 的元素不会被包含,而 visibility: hidden 的元素会保留占位。
接下来是 布局(Layout / Reflow):浏览器计算每个节点在屏幕上的确切位置和尺寸。布局是一个递归过程,从根节点开始,逐层计算。布局完成后,每个节点都有了精确的坐标和大小。
七、绘制与合成
布局完成后,浏览器进入 绘制(Paint)阶段:将每个节点转换为屏幕上的像素。绘制通常分层进行,例如普通文档流、固定定位元素、视频、Canvas 等会被分配到不同的 图层。
最后是 合成(Composite):合成线程将各图层合并,最终输出到屏幕。现代浏览器利用 GPU 加速合成,使得滚动和动画更加流畅。
八、关键性能指标与优化方向
理解整个流程后,可以针对性地优化:
- DNS 优化:使用 DNS 预解析
<link rel="dns-prefetch"> - 连接优化:启用 HTTP/2、TLS 1.3、连接复用
- 请求优化:减少请求数、使用 CDN、开启压缩
- 解析优化:避免同步脚本、内联关键 CSS
- 渲染优化:减少重排重绘、使用
transform和opacity做动画、避免布局抖动
总结
从输入 URL 到页面渲染,浏览器经历了 URL 解析、DNS 查询、TCP/TLS 握手、HTTP 请求响应、HTML/CSS 解析、DOM/CSSOM 构建、渲染树生成、布局、绘制和合成等十余个关键步骤。每一步都可能成为性能瓶颈。掌握这个完整流程,是进行 Web 性能优化的基础,也是理解现代浏览器工作原理的核心。
未经允许不得转载:任鹏个人博客 » 从输入 URL 到页面渲染:浏览器完整流程解析


朋友圈点赞图在线生成源码