基于本文回答

播面 播面

刷题像听歌,多听自然懂
0
评论

浏览器缓存的位置有哪些?(Memory Cache vs Disk Cache)

知识点图片

浏览器缓存(Browser Caching)是性能优化的关键机制。当浏览器请求资源时,它会按照特定的优先级顺序查找缓存。

主要关注的 Memory Cache(内存缓存)和 Disk Cache(硬盘缓存)是浏览器缓存机制中的核心部分。

以下是详细的对比和解析:


1. 缓存查找的优先级顺序

在深入了解 Memory 和 Disk 之前,需要知道浏览器查找资源的顺序通常是这样的:

  1. Service Worker Cache (由开发者控制,离线缓存)
  2. Memory Cache (内存缓存)
  3. Disk Cache (硬盘缓存,也叫 HTTP Cache)
  4. Push Cache (HTTP/2 推送缓存,存活时间极短,较少提及)
  5. Network (网络请求)

2. Memory Cache(内存缓存)

Memory Cache 是指存在于计算机内存(RAM)中的缓存。

  • 特点:
    • 速度最快: 读取内存的速度远远快于硬盘。
    • 时效性短: 它是非持久化的。一旦你关闭了 Tab 页(标签页)或者关闭了浏览器,内存中的缓存就会被释放。
    • 容量小: 操作系统分配给浏览器的内存是有限的,不能无限存储。
  • 存储内容:
    • 通常存储当前页面中已经抓取到的资源,例如页面上已经下载的样式、脚本、图片等。
    • 浏览器会根据计算机当前的内存使用率(Free RAM)来决定是否存入 Memory Cache。
  • 触发场景:
    • 当你刷新页面(F5)时,如果 Tab 页没关,浏览器会优先从 Memory Cache 中读取很多资源(你会看到 Network 面板中显示 from memory cache)。
    • <link rel="preload"> 预加载的资源通常也会进入内存。

3. Disk Cache(硬盘缓存)

Disk Cache 是指存在于计算机硬盘(HDD 或 SSD)中的缓存。

  • 特点:
    • 容量大: 硬盘空间通常很大,可以存储大量文件。
    • 持久存储: 即使关闭浏览器或重启电脑,缓存依然存在(直到过期或被清理)。
    • 速度较慢: 读取速度比内存慢,但比网络请求快得多。
  • 存储内容:
    • 绝大部分的静态资源(CSS, JS, 图片等)。
    • 浏览器会根据 HTTP 响应头(如 Cache-Control, Expires 等)来决定哪些资源存入硬盘,以及存多久。
  • 触发场景:
    • 当你关闭 Tab 页后重新打开,或者在地址栏回车访问时,Memory Cache 已经清空,浏览器会去 Disk Cache 查找资源(Network 面板显示 from disk cache)。

4. Memory Cache vs Disk Cache 对比表

特性 Memory Cache (内存缓存) Disk Cache (硬盘缓存)
存储位置 RAM (内存) Hard Drive (硬盘)
读取速度 极快 (0ms 级别) 快 (几毫秒到十几毫秒)
容量限制 小 (受限于可用内存) 大 (受限于硬盘空间)
持久性 差 (Tab 关闭即失效) 强 (长期存储)
控制权 浏览器自动管理 (黑盒) 可通过 HTTP Header 控制
适用场景 当前会话频繁使用的资源 跨会话、大文件、长期资源

5. 浏览器是如何决定存哪里的?

这是一个比较复杂的内部机制(Heuristic),不同的浏览器(Chrome, Firefox, Safari)策略略有不同,但通常遵循以下规律:

  1. 大文件 vs 小文件:
    • 大文件通常直接扔进 Disk Cache,因为内存太贵重了。
    • 小文件可能先在内存,也可能在硬盘。
  2. 内存使用率:
    • 如果当前系统内存紧张,浏览器会倾向于不存 Memory Cache,或者快速清理 Memory Cache。
  3. 资源类型:
    • Base64 图片:通常直接在内存里(因为它们是作为字符串解析在 DOM 里的)。
    • 隐私模式:通常不使用 Disk Cache,只使用 Memory Cache(为了关闭后不留痕迹)。

6. 用户行为对缓存的影响

用户的操作会直接决定浏览器去哪里找缓存:

  • 地址栏回车 / 点击链接 / 打开新窗口:
    • 查找顺序:Disk Cache -> Network。
    • (因为是新开的,内存里没有数据)。
  • F5 普通刷新 (Refresh):
    • 查找顺序:Memory Cache -> Disk Cache -> Network。
    • (因为 Tab 没关,内存里还有旧数据,优先用内存)。
  • Ctrl + F5 强制刷新 (Hard Reload):
    • 不使用任何缓存
    • 浏览器会在请求头添加 Cache-Control: no-cache,强制从服务器拉取最新数据。

总结

  • Memory Cache 是为了当前会话的极致速度体验(比如你频繁刷新页面)。
  • Disk Cache 是为了跨会话的加载速度(比如你明天再来访问这个网站)。

在 Chrome 开发者工具的 Network 面板中,你可以通过 Size 列清晰地看到资源是来自 (memory cache) 还是 (disk cache)

00:00
00:00