前端开发资源缓存策略
好的,我来系统讲一下 前端开发中的资源缓存策略,包括原理、常见策略和实战建议。
前端开发资源缓存策略
一、为什么需要缓存?
-
提高加载速度(减少请求)
-
减轻服务器压力
-
提升用户体验
二、浏览器缓存的分类
类型 | 说明 |
---|---|
强缓存 | 不发送请求到服务器,直接用本地缓存。 |
协商缓存 | 发送请求到服务器,服务器判断资源是否改变,决定返回新资源或304。 |
三、常见的缓存策略
1. 强缓存(直接用本地资源,不访问服务器)
-
依赖 HTTP 头部:
-
Expires
(HTTP/1.0,绝对时间,受本地时间影响) -
Cache-Control: max-age=xxx
(HTTP/1.1,相对时间,更常用)
-
示例:
Cache-Control: max-age=31536000
表示资源在 1 年内有效,不会重新请求。
2. 协商缓存(需要向服务器确认)
-
依赖 HTTP 头部:
-
Last-Modified
/If-Modified-Since
-
ETag
/If-None-Match
-
流程:
-
浏览器请求资源。
-
服务器返回资源,同时加上
Last-Modified
或ETag
。 -
下次请求时,浏览器带着这些信息询问服务器。
-
服务器对比后:
-
没变化:返回 304 + 空body。
-
有变化:返回 200 + 新资源。
-
四、缓存更新的难题
版本更新后,旧缓存怎么清理?
解决方案:
-
文件名加 hash(最常见)
-
main.7c9c0a1.js
-
-
CDN 配合缓存控制
-
合理使用 Service Worker(复杂但灵活)
五、常见缓存策略搭配
资源类型 | 缓存策略 |
---|---|
HTML 页面 | 不缓存/短缓存 + 每次协商(保证内容更新) |
CSS/JS(加hash) | 强缓存一年,更新自动 hash 变化 |
图片、字体(加hash) | 强缓存一年,更新自动 hash 变化 |
API 接口数据 | 按需缓存,通常设置为不缓存或者短时缓存 |
六、实战建议
-
构建工具(如Webpack)自动加hash。
-
公共资源使用CDN加缓存头。
-
重要接口返回时设置合理的 Cache-Control。
-
监控缓存命中率,定期评估。
要不要我再补充一版关于 缓存具体设置示例(比如 nginx 配置 / webpack 配置)?要的话告诉我!🚀
要不要顺便也讲下更进阶一点的 Service Worker 离线缓存方案?✨
(都可以一起搞懂,很实用!)你想听哪一块?