网络阶段:URL 解析(补全协议)→ DNS 查询(递归找 IP,浏览器/系统/路由器缓存逐级查)→ 建立 TCP 连接(三次握手,HTTPS 再加 TLS 握手)→ 发送 HTTP 请求 → 服务器处理并返回响应。拿到 HTML 后进入关键阶段:状态码决定下一步(301/302 跳转、304 用缓存、200 解析)。
渲染阶段:HTML 解析器边下载边解析成 DOM 树;CSS 解析成 CSSOM;两者合成渲染树(Render Tree,只含可见节点——display:none 不入树、head 不入树);布局(Layout/reflow 算几何位置)→ 绘制(Paint 像素)→ 合成(Composite,分层合成 GPU 加速)。期间 JS 阻塞 DOM 解析(除非 async/defer),CSS 阻塞渲染。理解了这条主线,后续重绘回流、缓存、跨域等题都有了挂靠点。
<!-- 这条链路上的优化手段(回答时可挂靠) --> <head> <!-- 提前解析域名:省 DNS 查询时间 --> <link rel="dns-prefetch" href="//cdn.example.com"> <!-- 预连接:DNS + TCP + TLS 全部提前 --> <link rel="preconnect" href="//cdn.example.com" crossorigin> <!-- 关键资源预加载:提前进入请求队列 --> <link rel="preload" as="font" href="/font.woff2" crossorigin> <!-- 关键 CSS 内联:让首屏渲染不等外部样式表 --> <style>/* critical css */</style> </head> <body> <!-- defer:不阻塞解析,DOMContentLoaded 前执行 --> <script src="/app.js" defer></script> <!-- async:下载不阻塞,下完立即执行(不保证顺序) --> <script src="/tracker.js" async></script> </body>