强缓存与协商缓存:二次访问为什么飞快
强缓存与协商缓存:二次访问为什么飞快
第一次访问网站要下载所有资源,第二次却秒开——缓存是性能优化里性价比最高的手段。浏览器缓存分两级。
强缓存:不请求,直接用本地副本
响应头通过 Cache-Control 声明有效期:
Cache-Control: max-age=31536000, immutable
有效期内浏览器连请求都不发,状态码显示 200 (from disk/memory cache)。常用指令:
max-age:有效期秒数no-cache:不是不缓存!是每次用之前必须向服务器确认no-store:真正的不缓存,完全不存public/private:是否允许代理 CDN 缓存
Expires 是老版本的绝对时间,有时钟不一致问题,Cache-Control 优先级更高。
协商缓存:问一句"还能用吗"
强缓存过期后,浏览器带上验证字段问服务器:
- 文件没变 → 304 Not Modified,没有响应体,浏览器继续用本地副本
- 文件变了 → 200,返回新内容
两组验证字段(服务器返回 / 浏览器下次带回):
| 服务器返回 | 请求带回 | 对比维度 |
|---|---|---|
| Last-Modified | If-Modified-Since | 文件修改时间(秒级,可能"内容没变时间变了") |
| ETag | If-None-Match | 内容指纹哈希(更精确,优先级更高) |
实战配置策略
HTML:no-cache(每次确认,保证能拿到最新入口)
JS/CSS/图片(带 hash 指纹):max-age=31536000, immutable
构建工具产出的文件名都带内容 hash(如 app.a8f3c2.js),内容变文件名才变,所以可以放心缓存一年。这就是"HTML 不缓存、静态资源永久缓存"的经典搭配。
看到这里了?如果这篇文章帮到过你
请我喝瓶可乐就好 🥤

评论0 条
还没有评论,来抢沙发~