缓存策略怎么选?强缓存和协商缓存到底怎么用才对? Mr.景源 提问于 2026-03-16 17:45:19 阅读 3 优化 我最近在优化项目加载速度,看到浏览器缓存有强缓存和协商缓存两种,但搞不清实际场景该用哪个。比如静态资源像 JS、CSS 文件,我试过加 Cache-Control: max-age=31536000,但更新后用户还是拿不到新文件,是不是得配合文件名哈希才行? 另外,接口数据用协商缓存的话,服务器要返回 ETag 或 Last-Modified,但我用的 Nginx 静态托管,API 是另一个服务,配置起来有点混乱。有没有一套清晰的缓存策略可以参考? 我来解答 赞 1 收藏 分享 生成中... 手机扫码查看 复制链接 生成海报 反馈 发表解答 您需要先 登录/注册 才能发表解答 1 条解答 开发者鉴恒 Lv1 静态资源用强缓存+文件名哈希是标配。光设 max-age 没用,文件名必须带 hash(比如 app.abc123.js),每次发布改内容哈希值就变,URL 变了浏览器自然重新请求。接口用协商缓存,Nginx 默认就支持 ETag,开起来就行。 # 静态资源 -强缓存一年,文件名带hash的 location ~* .(js|css|png|jpg|jpeg|gif|ico|svg)$ { expires 1y; add_header Cache-Control "public, max-age=31536000"; } # API - 协商缓存 location /api/ { etag on; } 检查一下你的构建工具(webpack/vite/rollup),输出文件名配置成 contenthash 模式就行。 回复 点赞 2026-03-16 19:09 加载更多 相关推荐 1 回答 15 浏览 前端缓存预热到底该怎么实现? 最近在做首屏性能优化,听说缓存预热能提升后续页面加载速度,但我不太确定具体该怎么做。 比如用户刚进入首页,能不能提前把“个人中心”或“商品详情”这些高频页面的静态资源(JS、CSS、图片)悄悄加载到缓... 慕容璐莹 优化 2026-03-06 15:04:22 1 回答 52 浏览 Service Worker缓存策略中,动态路由页面怎么总是返回旧内容? 我在用Vue Router做单页应用时,给Service Worker设置了缓存策略,静态资源没问题,但动态路由页面(比如/user/123)更新后,客户端还是返回旧内容。尝试过用url.pathna... 程序猿东硕 优化 2026-02-14 22:52:27 1 回答 11 浏览 Webpack打包后怎么分析bundle里到底包含了哪些模块? 我用Webpack打包完项目,发现vendor.js特别大,想看看里面到底塞了哪些依赖,但不知道怎么生成分析报告。试过加--analyze参数,但好像没生效? 网上说要用webpack-bundle-... 西门向景 前端 2026-03-12 17:00:21 1 回答 70 浏览 WebView缓存不生效,页面总是重新加载怎么办? 我在做Hybrid App时,用WebView加载H5页面,明明设置了缓存策略,但每次打开都重新请求资源,根本没走缓存,特别慢。 我试过在Android里设置webView.getSettings()... 燕燕酱~ 移动 2026-03-11 14:57:20 1 回答 16 浏览 Workbox缓存策略不生效,为什么离线还是加载不了页面? 我用Workbox的staleWhileRevalidate策略缓存了首页和静态资源,但手机断网后刷新页面还是白屏,控制台也没报错。是不是注册顺序有问题? 我的sw.js是这样写的: import {... 公孙艳清 移动 2026-03-11 14:37:18 1 回答 19 浏览 Service Worker 缓存策略怎么和 Vue 路由配合? 我用 Vue 做了个单页应用,加了 Service Worker 做缓存,但发现页面刷新后有时会卡在旧版本,尤其是切换路由后再刷新。是不是缓存策略没配对? 我试过在 sw.js 里用 CacheFir... UP主~皓宇 优化 2026-03-03 21:27:24 2 回答 19 浏览 Lighthouse跑分时为什么总提示“未建立缓存策略”? 我用 Lighthouse 测性能,每次都会报“未建立缓存策略”,但我的静态资源明明加了 Cache-Control: max-age=31536000 啊。是不是哪里没配对? 我用的是 Nginx,... 码农诗雅 前端 2026-03-03 11:13:20 2 回答 40 浏览 Service Worker缓存策略更新后页面还是加载旧资源怎么办? 最近给项目加了Service Worker做静态资源缓存,但今天部署新版本后发现用户还是在加载旧资源。我尝试过清除浏览器缓存和用cache-first策略,但页面内容就是不更新,这是什么情况啊? 我设... 书生シ洋洋 优化 2026-02-03 22:05:32 2 回答 43 浏览 GitHub Actions CI流水线每次运行都会重新安装依赖,缓存策略没生效怎么办? 最近在给项目配置GitHub Actions的CI流水线,按照教程设置了npm缓存,但每次提交代码后还是能看到`npm install`重新执行,缓存似乎没起作用。我的工作流配置里明明写了`npm c... 码农文鑫 前端 2026-01-27 23:59:37 0 回答 5 浏览 Ajax 请求被缓存了怎么办? 我用 jQuery 发了个 Ajax 请求,结果发现浏览器直接返回缓存数据,根本没发新请求!明明后端数据已经变了,前端却还是旧的。 我试过加时间戳:url + '?t=' + Date.now(),但... A. 志红 前端 2026-03-16 11:03:19
检查一下你的构建工具(webpack/vite/rollup),输出文件名配置成 contenthash 模式就行。