← 返回目录

第 2 卷

第 2 / 10 卷日期:

4. 强缓存和协商缓存(核心区别+定义)

浏览器缓存分为强缓存和协商缓存两个层级,是缓存工作的核心逻辑,强缓存优先于协商缓存。

✅ 强缓存(本地缓存直接生效,无网络请求)

定义

浏览器根据服务器返回的 Cache-Control / Expires 规则,判断本地缓存是否在有效期内,有效期内直接使用本地缓存,不向服务器发起任何请求,是性能最优的缓存方式。

触发条件

• Cache-Control: max-age=xxx 未过期

• Expires 时间戳未到(客户端时间未超过该值)

特征

• 无网络请求,加载速度最快

• 状态码: 200 OK (from disk cache/memory cache)

• 核心控制字段: Cache-Control(主)、 Expires(辅)

✅ 协商缓存(需与服务器验证,轻量网络请求)

定义

强缓存失效后,浏览器携带资源更新标识(ETag/Last-Modified)向服务器发起条件请求,服务器验证资源是否更新,决定是否复用本地缓存,仅传输请求头/响应头,无资源体传输。

触发条件

• 强缓存过期( max-age 到期/ Expires 超时)

• 手动刷新页面(F5),强制跳过强缓存

• 资源设置 Cache-Control: no-cache

特征

• 有网络请求,但仅传输少量头部信息,带宽消耗低

• 资源未更新:返回 304 Not Modified,复用本地缓存

• 资源已更新:返回 200 OK,更新本地缓存

• 核心控制字段: ETag/If-None-Match(主)、 Last-Modified/If-Modified-Since

✅ 强缓存 vs 协商缓存核心区别

维度强缓存协商缓存
网络请求无(直接读本地)有(仅条件请求,无资源体)
服务器交互无有(验证资源是否更新)
状态码200 (from cache)304 Not Modified / 200 OK
性能消耗极低(最优)低(仅头部传输)
控制字段Cache-Control、ExpiresETag/Last-Modified + 对应

请求头

触发时机缓存未过期缓存过期/强制刷新/设置nocache

资源一致性依赖缓存有效期,可能存在过实时验证服务器,资源绝对最期资源新

5. 优化网页加载性能的缓存策略设置(实战最佳实践)

缓存策略的核心原则:静态资源强缓存+协商缓存兜底,动态资源禁用缓存/短时效协商缓存,结合 CDN缓存,最大化减少网络请求,兼顾性能和资源更新时效性。

✅ 一、静态资源(核心优化,占比90%,如JS/CSS/图片/字体/静态HTML)

静态资源内容变更频率极低,优先设置长时效强缓存,搭配ETag/Last-Modified协商缓存,同时通过文件哈希命名解决「缓存更新不及时」问题(核心方案)。

  1. 基础缓存配置(HTTP响应头)

Code block

1#推荐配置(生产环境):强缓存1年+协商缓存+公共缓存+不可变
2Cache-Control: public, max-age=31536000, immutable
3ETag: "xxx哈希值"
4Last-Modified: [资源最后修改时间]
  • 实操(工程化):

• Webpack/Vite打包时,对JS/CSS/图片自动生成contenthash: main.[contenthash].js

• CDN同步缓存哈希资源,最大化利用CDN节点缓存

• 入口 index.html:设置 Cache-Control: no-cache,强制协商缓存,保证每次请求都获

取最新的资源列表

  1. 细分资源缓存策略

• 图片/字体/视频: max-age=31536000 (1年) + immutable + ETag,永久强缓存,哈希

更新兜底。

  • JS/CSS: max-age=31536000 + immutable + ETag,结合工程化哈希打包,极致缓存。
  • 静态HTML(非入口): max-age=86400 (1天) + ETag,短时效强缓存,兼顾更新。

✅ 二、入口文件(index.html,核心枢纽)

入口文件是所有静态资源的引用入口,禁止强缓存,必须设置协商缓存,否则静态资源哈希更新后,浏览器仍读取旧的index.html,导致加载旧资源。

推荐配置

Code block

1Cache-Control: no-cache, must-revalidate
2ETag: "xxx哈希值"
3Last-Modified: [更新时间]
  • 效果:每次请求都与服务器协商,保证获取最新的资源引用,同时复用缓存(304),无性能损

耗。

✅ 三、动态资源(如接口数据、动态接口、用户信息)

动态资源内容实时变更,禁止强缓存,按需设置协商缓存或完全禁用缓存,避免返回过期数据。

  1. 实时接口(如支付、用户信息、实时数据):完全禁用缓存

Code block

1Cache-Control: no-store, no-cache

全站分卷索引 · 10 卷
  1. 1第 1 卷
  2. 2第 2 卷
  3. 3第 3 卷
  4. 4第 4 卷
  5. 5第 5 卷
  6. 6第 6 卷
  7. 7第 7 卷
  8. 8第 8 卷
  9. 9第 9 卷
  10. 10第 10 卷