# 从输入 URL 到页面加载:系统复习笔记

一页纸(30 秒)

  • 浏览器多进程,渲染进程多线程(GUI、JS、网络、定时器、事件)。输入 URL → 解析协议与地址 → 启动网络线程。
  • DNS 解析(缓存 → 递归/迭代,可能经 CDN 调度)。TCP 三次握手(HTTP/1.x);TLS 握手(HTTPS)。
  • 发送 HTTP 请求(方法/URL/Headers/Body)→ 服务端(负载均衡/网关/应用)处理 → 返回响应(状态码/Headers/Body)。
  • 缓存判定:强缓存(Cache-Control/Expires)优先;否则协商缓存(ETag/If-None-Match 或 Last-Modified/If-Modified-Since)。
  • 解析与渲染:HTML→DOM,CSS→CSSOM,合并为 Render Tree → Layout(回流)→ Paint(重绘)→ Composite(合成,GPU 参与)。
  • 资源加载:CSS 异步加载但会阻塞首次渲染;JS 默认阻塞解析(async/await、defer 区别);图片异步不阻塞解析。
  • 关键事件:DOMContentLoaded(DOM 构建完成,不含样式/图片)与 load(所有资源加载完成)。
  • JS 引擎:解析(词法/语法→AST→字节码/机器码)、预处理(变量/函数提升;ASI 分号补全)、执行(执行上下文/作用域链/this/GC)。

# 主干流程(骨架)

URL → 解析协议/主机/端口/路径/查询/Fragment
  → 启动网络线程
  → DNS 解析(多级缓存 → 递归/迭代,可能 CDN 调度)
  → TCP 三次握手(HTTP/1.x),或 QUIC/TCP 复用(HTTP/3/2)
  → (HTTPS)TLS 握手(证书校验、对称密钥协商)
  → 发送 HTTP 请求 → 网关/负载(Nginx)→ 应用 → 数据/缓存
  → 返回响应(状态码/头/体)
  → 缓存规则判定(强缓存→命中即用;否则发起协商缓存)
  → 解析与渲染:HTML→DOM,CSS→CSSOM,合并 Render Tree
  → Layout(回流)→ Paint(重绘)→ Composite(合成)→ 显示
  → 事件:DOMContentLoaded / load

# 网络与协议

  • DNS:多级缓存(浏览器/系统/Host/ISP 递归);耗时可用 dns-prefetch 预解析(谨慎使用)。
  • TCP:三次握手/四次挥手;同域并发连接数受限(2–10+)。HTTP/2 多路复用同一 TCP,HTTP/3 使用 QUIC(基于 UDP)。
  • GET vs POST(规范层):GET 通常一个包(头+体合并);POST 常为两个阶段(Expect: 100-continue)。
  • HTTPS(TLS):证书校验(CA→链),ClientRandom/ServerRandom/Premaster 协商对称密钥,后续对称加密传输。

# HTTP 交互与常用头

  • 通用:Method、URL、Status、Content-Type、Content-Encoding(gzip/br)、Connection、Keep-Alive。
  • CORS:Origin ↔ Access-Control-Allow-Origin/Methods/Headers,预检 OPTIONS。
  • Cookie/Set-Cookie:作用域/过期/SameSite/HttpOnly/Secure;静态资源建议使用无 Cookie 域名以减负。

# 缓存(强/协商)

  • 强缓存:Cache-Control: max-age / immutable / s-maxage;(HTTP/1.0)Expires。
  • 协商缓存:ETag ↔ If-None-Match(更精确);Last-Modified ↔ If-Modified-Since(秒级)。
  • 规则:强缓存命中直接 200(from cache);否则发起请求,协商命中 304。
  • 生产建议:优先 Cache-Control + ETag;存在同时配置时 Cache-Control 优先于 Expires。

# 资源加载与阻塞

  • CSS:异步下载;首次渲染前阻塞(避免闪烁/错样)。media 属性不阻塞。
  • JS:默认阻塞解析;async(下载并行,下载完即执行,顺序不保证)、defer(解析后、DOMContentLoaded 前后执行,按顺序)。
  • IMG:异步下载,不阻塞解析,完成后替换占位。
  • 事件:DOMContentLoaded(仅 DOM 就绪);load(所有资源就绪)。

# 渲染流水线

  • DOM 构建(字节→字符→token→节点→树),CSSOM 构建(同理)。
  • Render Tree = DOM(可见节点) + CSSOM(计算样式)。
  • Layout(回流):计算几何信息;Paint(重绘):绘制像素;Composite:合成图层(GPU)。
  • 触发回流的常见操作:更改几何(width/height/padding/margin/position)、读取布局信息(offset*/client*/scroll*、getComputedStyle)。
  • 优化要点:
    • 合批 DOM 读写(如使用请求帧/微任务队列、FastDom),避免读写交错。
    • 使用 class 切换代替逐条 style 写入;脱离文档流/开启合成层(will-change/transform)优化动画。
    • 长列表虚拟化、图片/字体策略(WebP/AVIF、子集化、preload/prefetch)。

# CSS 可视化格式模型(速览)

  • 盒模型:content/padding/border/margin。
  • 包含块 Containing Block:定位/尺寸的参照系。
  • BFC:块格式化上下文(float 不重叠、margin 折叠规则、内部自洽;触发:float≠none、position:absolute/fixed、display:inline-block/table-cell 等、overflow≠visible)。
  • IFC:行内格式化上下文(行框、基线、对齐规则)。

# JS 引擎与运行机制

  • 解析:词法/语法→AST→(字节码)→JIT 机器码。
  • 预处理:声明提升(var/函数)、ASI 分号插入(return 换行陷阱)。
  • 执行:执行上下文(全局/函数)、执行栈、VO/AO、作用域链、this 绑定(调用位置决定),事件循环(宏/微任务)。
  • GC:标记清除为主,分代回收(new space/old space)。避免无意闭包/全局引用导致泄漏。

# 安全与跨域(要点)

  • XSS(反射/存储/DOM):转义、CSP、HttpOnly、模板安全。
  • CSRF:SameSite Cookie、双重 Cookie + Token、Referer/Origin 校验。
  • CORS:服务端显式允许;预检缓存;凭证传递。

# 实战 Checklist

  • DNS:关键域名预解析(dns-prefetch / preconnect)。
  • 协议:全站 HTTPS;优先 HTTP/2/3;开启 gzip/br 压缩。
  • 缓存:静态资源强缓存 + 内容哈希;ETag/Last-Modified 兜底;HTML 设短缓存或 no-store。
  • 资源:关键 CSS 内联;JS 合理 async/defer;图片自适应与懒加载;字体子集与 font-display。
  • 渲染:动画用 transform/opacity;合批 DOM 变更;虚拟列表;避免同步布局抖动。
  • 监控:采集 LCP/CLS/INP/TTI;错误上报(Sentry)+ SourceMap;关键链路埋点。

# 高频问法(30 秒口径)

  • 输入 URL 发生了什么?按“网络 → 缓存 → 解析/渲染 → JS 运行”的顺序回答,并在每步点名关键点(DNS/TLS/缓存头/阻塞点/事件/回流重绘/async vs defer)。
  • 强缓存 vs 协商缓存?命中条件与头部对;改动路径/版本哈希刷新强缓存;304 的生效条件。
  • CSS/JS 对首屏的影响?CSS 阻塞首次渲染、JS 阻塞解析;async/defer 区别与使用场景。
  • 回流与重绘?触发操作、如何合批读写、动画优化手段。
  • TLS 如何握手?证书校验与对称密钥协商的核心步骤与开销点。

# 速记卡片(Anki 导入示例 TSV)

输入 URL 的完整链路?	DNS→TCP/TLS→HTTP 请求/响应→缓存判定→HTML/CSS 解析→Render Tree→Layout/Paint/Composite→DOMContentLoaded/load
强缓存与协商缓存如何区分?	强缓存:Cache-Control/Expires 命中直接用;协商缓存:ETag/Last-Modified 对比命中返回 304
async 与 defer 区别?	async 下载后立即执行,顺序不保证;defer 按顺序、文档解析完成后执行(一般在 DOMContentLoaded 前后)
回流与重绘的触发?	回流:几何变更/读取布局属性;重绘:颜色/阴影等外观变化;回流必然重绘
HTTPS 核心价值与代价?	提供机密性/完整性/身份认证;握手开销、证书管理;配合 HTTP/2/3 可抵消延迟

# 参考

  • How browsers work(HTML5Rocks)
  • FEX: What happen when you…
  • 文章原文:从输入 URL 到页面加载的过程(戴力春)