标准答案

  1. 先解析 URL,判断协议、域名、端口、路径和查询参数,并检查浏览器缓存、HSTS、Service Worker 等可能影响请求的环节。
  2. 如果需要网络请求,浏览器会做 DNS 解析,建立 TCP 连接,HTTPS 还要完成 TLS 握手。
  3. 浏览器发送 HTTP 请求,服务端返回 HTML、状态码、响应头和响应体。
  4. 浏览器解析 HTML 生成 DOM,解析 CSS 生成 CSSOM,遇到脚本、样式、图片、字体等资源时按规则加载和阻塞。
  5. DOM 和 CSSOM 生成渲染树后,浏览器进行布局、绘制和合成,最后把页面显示到屏幕上。

题目解析

这道题要按阶段回答,不要只说 DNS、TCP、HTTP 三件事。前端面试还会关注解析和渲染链路。

关键资源会影响首屏。同步脚本可能阻塞 HTML 解析,CSS 会影响渲染,图片和字体会影响 LCP、CLS 和视觉稳定性。

实际排查性能问题时,要结合 Network、Performance、Timing API 和 Web Vitals 看瓶颈在哪一段。

代码示例

可以用 Navigation Timing 粗略查看导航、请求和文档加载阶段的耗时。

JavaScript
const [entry] = performance.getEntriesByType('navigation')

console.log({
  dns: entry.domainLookupEnd - entry.domainLookupStart,
  tcp: entry.connectEnd - entry.connectStart,
  request: entry.responseStart - entry.requestStart,
  response: entry.responseEnd - entry.responseStart,
  domReady: entry.domContentLoadedEventEnd - entry.startTime,
  load: entry.loadEventEnd - entry.startTime
})

常见误区

  • 只背网络阶段,忽略 HTML 解析、CSSOM、布局、绘制和合成。
  • 认为 DOMContentLoaded 等于页面完全可用,忽略图片、字体和异步数据。
  • 把所有首屏慢都归因于接口慢,没有区分网络、渲染和资源优先级问题。

作者信息