当前位置: 首页 > news >正文

HTTP请求与缓存、页面渲染全流程

文章目录

  • 前言
    • **1. HTTP请求与缓存处理**
      • **缓存机制**
        • • 强缓存(Cache-Control / Expires)
        • • 协商缓存(Last-Modified / ETag)
    • **2. 服务器响应与数据解析**
    • **3. HTML DOM 构建**
    • **4. CSSOM 构建**
    • **5. 渲染树(Render Tree)生成**
    • **6. 布局(Layout / Reflow)**
    • **7. 绘制(Painting)**
    • **8. 合成(Compositing)与显示**
    • **总结:从请求到渲染的完整流程**


前言

HTTP请求与缓存、页面渲染全流程

当用户在浏览器输入URL并按下回车,到页面最终渲染到屏幕上,整个过程涉及多个关键步骤:

  1. HTTP请求与缓存处理
  2. 服务器响应与数据解析
  3. HTML DOM 构建
  4. CSSOM 构建
  5. 渲染树(Render Tree)生成
  6. 布局(Layout/Reflow)
  7. 绘制(Painting)
  8. 合成(Compositing)与显示

1. HTTP请求与缓存处理

浏览器在发起HTTP请求前,会先检查缓存策略,以减少不必要的网络请求。

缓存机制

• 强缓存(Cache-Control / Expires)

• 浏览器检查Cache-Control(优先级更高)或Expires,判断资源是否过期。

• 如果未过期,直接从内存缓存(Memory Cache)或磁盘缓存(Disk Cache)读取,不发送HTTP请求。

• 示例:

```http
Cache-Control: max-age=3600  // 1小时内有效
Expires: Wed, 21 Oct 2025 07:28:00 GMT
```
• 协商缓存(Last-Modified / ETag)

• 如果强缓存失效,浏览器会向服务器发送请求,携带If-Modified-Since(基于Last-Modified)或If-None-Match(基于ETag)。

• 服务器检查资源是否变化:

◦ 304 Not Modified:资源未变,浏览器继续使用缓存。  ◦ 200 OK:资源已更新,返回新数据。  

• 示例:

```http
Last-Modified: Wed, 21 Oct 2025 07:28:00 GMT
ETag: "33a64df551425fcc55e4d42a148795d9"
```

2. 服务器响应与数据解析

• 服务器返回HTTP Response,包含:

• 状态码(200 OK / 304 Not Modified / 404 Not Found)

• 响应头(Content-TypeCache-Control等)

• 响应体(HTML、CSS、JS等)

• 浏览器解析流程:

  1. 解析HTML → 构建DOM树
  2. 解析CSS → 构建CSSOM树
  3. 执行JS(可能阻塞DOM/CSSOM构建)
  4. 合并DOM + CSSOM → 生成Render Tree(渲染树)
  5. 布局(Layout) → 计算元素位置
  6. 绘制(Paint) → 填充像素
  7. 合成(Composite) → 最终渲染到屏幕

3. HTML DOM 构建

• 解析HTML:

• 浏览器逐行读取HTML,遇到<script>会暂停解析,执行JS(除非async/defer)。

• 解析完成后,生成DOM树(Document Object Model)。

• DOM树结构:

<html><head><title>Page</title></head><body><div>Hello</div></body>
</html>

Document
├─ <html>
│   ├─ <head>
│   │   └─ <title>Page</title>
│   └─ <body>
│       └─ <div>Hello</div>

4. CSSOM 构建

• 解析CSS:

• 浏览器解析<style>、外部.css文件,生成CSSOM(CSS Object Model)。

• CSSOM是树状结构,决定元素的最终样式(层叠、继承、优先级)。

• 示例:

body { font-size: 16px; }
div { color: red; }

CSSOM
├─ body { font-size: 16px; }
└─ div { color: red; }

5. 渲染树(Render Tree)生成

• 合并DOM + CSSOM:

• 浏览器遍历DOM树,结合CSSOM,生成Render Tree(仅包含可见元素,如display: none不包含)。

• Render Tree = DOM + Computed Styles

• 示例:

Render Tree
├─ <html>
│   └─ <body>
│       └─ <div>Hello</div> (color: red, font-size: 16px)

6. 布局(Layout / Reflow)

• 计算元素位置:

• 浏览器计算每个节点的几何信息(宽、高、位置)。

• 回流(Reflow):布局变化(如窗口大小改变、DOM修改)会触发重新计算。

• 优化:

• 避免频繁修改DOM(使用DocumentFragment)。

• 使用transform代替top/left减少回流。


7. 绘制(Painting)

• 填充像素:

• 浏览器遍历Render Tree,调用GPU绘制每个节点(颜色、边框、阴影等)。

• 重绘(Repaint):样式变化但不影响布局(如color变化)仅触发重绘。

• 优化:

• 减少复杂选择器(如div > span + p)。

• 使用will-change提示浏览器优化绘制。


8. 合成(Compositing)与显示

• GPU合成:

• 浏览器将不同层(如position: fixedopacity)交给GPU合成。

• 最终渲染:合成后的图像显示在屏幕上。

• 优化:

• 使用transformopacity触发GPU加速(避免主线程计算)。


总结:从请求到渲染的完整流程

  1. HTTP请求 → 检查缓存(强缓存/协商缓存)。
  2. 服务器响应 → 返回HTML/CSS/JS。
  3. 解析HTML → 构建DOM树。
  4. 解析CSS → 构建CSSOM树。
  5. 合并DOM+CSSOM → 生成Render Tree。
  6. 布局(Layout) → 计算元素位置。
  7. 绘制(Painting) → 填充像素。
  8. 合成(Compositing) → GPU渲染到屏幕。

关键优化点
✅ 缓存:合理设置Cache-ControlETag减少请求。
✅ 减少DOM操作:避免频繁回流/重绘。
✅ CSS优化:减少选择器复杂度,使用transform/opacity
✅ JS优化:async/defer避免阻塞DOM解析。

这样,浏览器就能高效地从HTTP请求到最终渲染页面! 🚀

相关文章:

  • React学习路线图-Gemini版
  • Linux基本操作——网络操作文件下载
  • Selenium的driver.get_url 和 手动输入网址, 并点击的操作,有什么不同?
  • ZYNQ笔记(十八):VDMA VGA彩条显示
  • 打造个人知识库,wsl+ollama部署deepseek与vscode集成
  • 偏导数和梯度
  • IoTDB端边云同步技术的五大常见场景及简便使用方式
  • Filecoin矿工资金管理指南:使用lotus-shed actor withdraw工具
  • 【uniapp】errMsg: “navigateTo:fail timeout“
  • 如何评价大语言模型架构 TTT ?模型应不应该永远“固定”在推理阶段?模型是否应当在使用时继续学习?
  • Spring Boot 中如何解决 CORS 问题(详解)
  • 智慧城市的数据共享与协作:如何用大数据构建未来城市?
  • LVGL -meter的应用
  • 可编辑218页PPT | 基于数据运营的新型智慧城市实践与思考
  • 记录学习的第三十五天
  • C# 引用类型作为值参数与引用参数的区别
  • 【软件测试学习day6】WebDriver常用的API
  • 代码随想录算法训练营第五十八天| 图论4—卡码网110. 字符串接龙,105. 有向图的完全联通
  • CHAPTER 17 Iterators, Generators, and Classic Coroutines
  • 《饶议科学》阅读笔记
  • 重庆三峡学院回应“85万元中标设备,网购价不到300元”:已着手解决
  • 耿军强任陕西延安市领导,此前任陕西省公安厅机场公安局局长
  • 巴基斯坦称成功拦截印度导弹,空军所有资产安全
  • 北京2025年住房发展计划:供应商品住房用地240-300公顷,建设筹集保租房5万套
  • 印巴冲突升级,巴基斯坦股市重挫7.29%,创5年来最大单日跌幅
  • 不主动上门检查,上海已制定14个细分领域“企业白名单”甄别规则