找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

1955

积分

0

好友

272

主题
发表于 2025-12-25 12:10:41 | 查看: 35| 回复: 0

第一阶段:浏览器预处理与缓存机制

在请求发出前,浏览器会执行URL解析与缓存检查,以优化性能。

1. URL 解析与检查

浏览器首先判断输入内容是搜索关键字还是有效URL。若为关键字,则跳转至默认搜索引擎;若为URL,则检查协议(如http或https)。当网站启用HSTS(HTTP Strict Transport Security)时,浏览器会强制将http请求内部重定向为https,无需发送网络请求。

2. 检查缓存(面试关键点)

这是前端性能优化的重要考点。浏览器优先检查强缓存,依据Expires或Cache-Control头字段判断。若命中强缓存,资源直接从内存缓存(Memory Cache)或磁盘缓存(Disk Cache)加载,状态码显示为200 (from memory/disk cache),从而避免网络请求。未命中时,才进入DNS解析阶段。更多关于前端框架与工程化中的缓存策略,可参考相关资源。

第二阶段:DNS解析流程

将域名转换为IP地址的过程称为DNS解析,遵循递归查询顺序:浏览器缓存、系统缓存(如hosts文件)、路由器缓存、ISP DNS缓存,最终从根域名服务器到权威域名服务器。2025年面试中,DNS Prefetch成为补充考点,前端可通过HTML头部的<link rel="dns-prefetch">标签提前解析DNS,减少延迟。深入了解网络协议如TCP/IP和HTTP有助于掌握此环节。

第三阶段:建立TCP/TLS连接

获取IP地址后,客户端与服务器通过TCP三次握手建立连接:SYN(客户端发起)、SYN+ACK(服务端响应)、ACK(客户端确认)。三次握手防止失效请求造成资源浪费。对于HTTPS,还需进行TLS握手以交换密钥和验证证书。HTTP/3(基于QUIC协议)将TCP和TLS握手合并,实现更快连接(0-RTT)。

TLS握手示意图

第四阶段:发送请求与服务器响应

客户端构建HTTP请求(包括请求行、头部和体),发送至服务器。服务器处理请求时,若配置协商缓存(如Etag或Last-Modified),会对比文件指纹。未变化则返回304 Not Modified,客户端使用缓存资源;变化则返回200 OK和新内容。

第五阶段:浏览器解析与渲染

此阶段是前端性能优化的核心领域。

1. 构建对象模型

  • DOM树:解析HTML生成,遇到脚本可能阻塞解析。
  • CSSOM树:解析CSS计算样式。

2. 生成渲染树(Render Tree)

结合DOM树和CSSOM树,排除如display: none的节点(但visibility: hidden节点会保留)。

3. 布局(Layout/Reflow)

计算节点在屏幕上的精确坐标和大小。回流(Reflow)由尺寸或位置变化触发,成本较高。

4. 绘制(Paint/Repaint)

填充像素颜色和视觉效果。重绘(Repaint)仅改变外观,成本较低。

5. 合成(Composite)

将图层传输到GPU处理并显示。优化技巧包括使用transformopacity动画,因为它们只触发合成,避免回流和重绘,从而提升性能。这在前端开发中,结合现代前端框架如Vue或React时尤为重要。

第六阶段:断开连接

请求结束后,TCP连接可能通过Keep-Alive保持复用。若需断开,则进行四次挥手(FIN-ACK过程)。

总结

整个过程可分为网络通信和页面渲染两大部分。网络部分聚焦缓存策略(强缓存/协商缓存)和连接优化(如HTTP/2多路复用或HTTP/3 QUIC);渲染部分重点优化关键渲染路径,减少回流,利用GPU加速合成。




上一篇:特德·姜《软件体的生命周期》:关于AI长期记忆与数字智能体商业化的启示
下一篇:PostgreSQL 17逻辑复制槽同步详解:实现高可用架构与内核原理剖析
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-1-10 08:53 , Processed in 0.202647 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

快速回复 返回顶部 返回列表