性能优化

71 阅读5分钟

浏览器缓存机制详解

浏览器的缓存机制是一个分层决策过程,旨在尽可能快地提供资源(如 HTML、CSS、JS、图片等),同时减少不必要的网络请求和服务器负载。其核心流程如下:


核心执行流程

  1. 发起请求
    用户输入 URL 或点击链接,浏览器准备加载相关资源。

  2. 检查强缓存(本地缓存)

    • 浏览器首先检查内存缓存(memory cache)和磁盘缓存(disk cache),查找是否有该资源副本。
    • 关键响应头:Cache-ControlExpires
      • Cache-Control: max-age=3600:资源在 3600 秒内有效。
      • Cache-Control: no-cache:跳过强缓存,进入协商缓存阶段。
      • Cache-Control: no-store:禁止任何缓存行为。
    • 结果判断
      • 若缓存有效 → 直接返回缓存资源(显示为 200 OK (from cache))。
      • 若缓存失效 → 进入下一步的协商缓存阶段。
  3. 协商缓存(服务器验证)

    • 浏览器向服务器发送验证请求,确认缓存是否仍可用。
    • 涉及的关键头部:
      • If-Modified-Since + Last-Modified
        • 浏览器发送上次修改时间 → 服务器比对当前时间:
          • 未修改 → 返回 304 Not Modified,使用本地缓存。
          • 已修改 → 返回 200 OK 和新资源。
      • If-None-Match + ETag
        • 浏览器发送资源唯一标识(如哈希值)→ 服务器比对 ETag:
          • 匹配 → 返回 304
          • 不匹配 → 返回 200 和新资源。
      • 优先级ETag 的精度高于 Last-Modified(例如内容未变但时间戳变化的情况)。
  4. 获取新资源

    • 若协商缓存失败(即未返回 304),则:
      • 服务器返回 200 OK 及新资源。
      • 浏览器下载并缓存资源,依据响应头中的 Cache-ControlExpires 决定是否缓存。

缓存相关关键头部总结

头部类型作用示例
Cache-Control请求/响应控制缓存行为max-age=3600, no-cache
Expires响应指定资源过期时间(HTTP/1.0)Expires: Wed, 21 Oct 2025 07:28:00 GMT
ETag响应资源唯一标识符ETag: "33a64df551425fcc55e"
If-None-Match请求携带缓存的 ETag 值If-None-Match: "33a64df551425fcc55e"
Last-Modified响应资源最后修改时间Last-Modified: Wed, 21 Oct 2025 07:28:00 GMT
If-Modified-Since请求携带缓存的修改时间If-Modified-Since: Wed, 21 Oct 2025 07:28:00 GMT

缓存位置分类

  1. Service Worker Cache

    • 通过 JavaScript 自定义缓存策略,适用于离线应用等场景。
  2. Memory Cache(内存缓存)

    • 存储高频使用的短生命周期资源,随页面关闭释放。
  3. Disk Cache(磁盘缓存)

    • 存储大文件(如 CSS、JS、图片),具有较长生命周期。
  4. Push Cache(推送缓存)

    • HTTP/2 中用于推送资源,会话级别缓存,较少被使用。

实际应用场景示例

  1. 静态资源(如 Logo)

    Cache-Control: max-age=31536000  // 缓存一年
    
  2. 频繁更新资源(如 JS/CSS)

    Cache-Control: max-age=86400      // 缓存一天
    ETag: "x234dff"                   // 配合版本号或哈希文件名使用
    
  3. 禁用缓存(敏感数据)

    Cache-Control: no-store
    

开发者注意事项

  • 资源版本控制:更新资源时建议修改文件名(如 app.v2.js)或添加查询参数(如 app.js?v=2),以强制客户端获取最新版本。
  • 调试工具使用
    Chrome DevTools 的 Network 面板可用于查看缓存状态:
    • 200 (memory/disk cache):表示强缓存生效。
    • 304 Not Modified:表示协商缓存生效。
  • 缓存问题排查:若更新资源后未生效,尝试清除缓存或使用 Ctrl+F5 强制刷新。

合理配置缓存策略,不仅能显著提升网站加载速度,还能有效降低服务器压力。掌握 Cache-ControlETag 等核心机制,是前端性能优化的重要一环。


如需进一步细化某一部分内容(如具体优化技巧、工具推荐等),欢迎继续提问!