一、输入处理阶段(0~300ms)
1.1 用户输入行为分析
-
键盘输入:Chrome会实时进行拼写检查(约50ms)
-
地址栏智能提示:
- 基于历史记录的自动补全(HSTS预加载列表检查)
- 搜索建议预测(通过Omnibox服务)
-
回车确认:触发beforeunload事件(允许页面保存状态)
1.2 URL解析流程
javascript
// 标准URL结构解析示例
scheme:[//[user[:password]@]host[:port]][/path][?query][#fragment]
// 特殊字符处理:
encodeURIComponent("测试") => "%E6%B5%8B%E8%AF%95"
1.3 进程调度
- 浏览器主进程启动网络线程
- 渲染进程预初始化(分配内存资源)
- GPU进程待命(准备硬件加速)
二、DNS解析阶段(0~2000ms)
2.1 解析优先级队列
-
浏览器缓存(chrome://net-internals/#dns)
-
本地hosts文件
-
路由器缓存
-
ISP递归查询(典型8步查询过程):
浏览器 → 本地DNS → 根DNS → 顶级DNS → 权威DNS
2.2 DNS优化策略
- TTL控制(默认300s)
- DNS预取()
- HTTP/2的Server Push
- DoH/DoT加密协议
三、建立连接阶段(100~500ms)
3.1 TCP三次握手
plaintext
客户端 SYN(seq=100)
服务端 SYN-ACK(seq=300, ack=101)
客户端 ACK(ack=301)
- 初始序列号算法(RFC 6528)
- SYN Cookie防御攻击
3.2 HTTPS握手(TLS 1.3)
sequenceDiagram
Client->>Server: ClientHello (SNI扩展)
Server->>Client: ServerHello + Certificate + Finished
Client->>Server: Finished
Note over Client,Server: 应用数据传输
3.3 协议演进对比
特性 | HTTP/1.1 | HTTP/2 | HTTP/3 |
---|---|---|---|
传输层 | TCP | TCP | QUIC |
多路复用 | 有限 | 流复用 | 原生复用 |
队头阻塞 | 存在 | 部分存在 | 完全消除 |
握手延迟 | 高 | 中 | 低 |
四、发送请求阶段(1~100ms)
4.1 请求头组成
http
GET /index.html HTTP/1.1
Host: www.example.com
Cookie: sessionID=abc123
Accept-Encoding: gzip, br
Cache-Control: max-age=0
4.2 关键请求头解析
- Cache-Control:no-cache / max-age=31536000
- Accept:MIME类型协商
- Cookie:SameSite属性(Lax/Strict/None)
五、服务器处理阶段(10~3000ms)
5.1 典型架构流程
arduino
Nginx → 负载均衡 → App Server → DB查询 → 缓存处理 → 模板渲染
5.2 常见响应状态码
- 301 Moved Permanently:永久重定向
- 304 Not Modified:协商缓存生效
- 404 Not Found:资源不存在
- 502 Bad Gateway:上游服务异常
六、接收响应阶段(1~500ms)
6.1 网络层解析
- 数据分包到达(MTU通常1500字节)
- TCP重组排序(处理乱序包)
- 流量控制(滑动窗口机制)
6.2 浏览器处理流程
- 检查Content-Type(MIME类型嗅探)
- 解码内容(gzip/brotli解压)
- 处理重定向(最多20次限制)
- 更新缓存(Disk Cache策略)
七、渲染引擎工作流程(100~2000ms)
7.1 关键渲染路径(Critical Rendering Path)
graph TD
HTML解析 --> DOM树
CSS解析 --> CSSOM树
DOM树+CSSOM树 --> 渲染树
渲染树 --> 布局计算
布局计算 --> 绘制列表
绘制列表 --> 合成显示
7.2 详细解析流程
-
构建DOM树
- 字节流解码(charset检测)
- 令牌化(Tokenization)
- 遇到
-
样式计算
- CSS选择器匹配(从右向左解析)
- 层叠规则计算(CSS specificity)
-
布局阶段
- 盒模型计算(包含块确定)
- 回流(Reflow)触发条件
-
图层合成
- will-change属性优化
- 硬件加速原理
八、持续连接阶段
8.1 Keep-Alive机制
- HTTP/1.1默认开启(Timeout=5s)
- 最大请求数限制(默认100)
8.2 预加载优化
html
<link rel="preload" href="font.woff2" as="font">
<link rel="prefetch" href="next-page.html">
运行 HTML
九、连接终止阶段
9.1 TCP四次挥手
plaintext
客户端 FIN(seq=500)
服务端 ACK(501)
服务端 FIN(seq=700)
客户端 ACK(701)
9.2 资源清理
- DOM事件解绑
- Web Worker终止
- 内存回收(标记清除算法)
十、关键性能指标
阶段 | 测量API | 优化目标 |
---|---|---|
DNS查询 | performance.timing | <200ms |
TCP连接 | Resource Timing API | <100ms |
首字节时间(TTFB) | navigation.timing | <500ms |
首次渲染 | FP/FCP | <1000ms |
可交互时间 | TTI | <5000ms |
十一、全流程时间轴示例
plaintext
0ms 输入URL
50ms DNS开始
150ms TCP连接建立
200ms HTTPS握手完成
300ms 发送HTTP请求
500ms 服务器处理
800ms 接收第一个响应包
1200ms DOM解析完成
1500ms CSSOM构建完成
1800ms 首屏渲染完成
2500ms 完全可交互
十二、常见问题排查
-
白屏时间过长
- 检查DOMContentLoaded时间
- 排查同步JavaScript阻塞
-
资源加载缓慢
- 使用HTTP/2服务器推送
- 验证CDN生效情况
-
布局抖动(Layout Thrashing)
- 使用FastDOM库
- 避免强制同步布局
这篇学习笔记系统梳理了从URL输入到页面呈现的全链路技术细节,建议结合Chrome DevTools的Performance面板进行实践分析,以加深对各阶段的理解。