缓存策略怎么选?强缓存和协商缓存到底怎么用才对? Mr.景源 提问于 2026-03-16 17:45:19 阅读 55 优化 我最近在优化项目加载速度,看到浏览器缓存有强缓存和协商缓存两种,但搞不清实际场景该用哪个。比如静态资源像 JS、CSS 文件,我试过加 Cache-Control: max-age=31536000,但更新后用户还是拿不到新文件,是不是得配合文件名哈希才行? 另外,接口数据用协商缓存的话,服务器要返回 ETag 或 Last-Modified,但我用的 Nginx 静态托管,API 是另一个服务,配置起来有点混乱。有没有一套清晰的缓存策略可以参考? 我来解答 赞 9 收藏 分享 生成中... 手机扫码查看 复制链接 生成海报 反馈 发表解答 您需要先 登录/注册 才能发表解答 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 加载更多 相关推荐 2 回答 56 浏览 静态资源缓存策略到底该怎么配才不会出问题? 我在部署一个 React 项目时,发现每次更新代码后用户还是看到旧内容,怀疑是缓存没处理好。我试过在 nginx 里加了 Cache-Control: max-age=31536000 给静态资源,但... 司空朝炜 优化 2026-03-20 10:07:21 2 回答 49 浏览 前端缓存预热到底该怎么实现? 最近在做首屏性能优化,听说缓存预热能提升后续页面加载速度,但我不太确定具体该怎么做。 比如用户刚进入首页,能不能提前把“个人中心”或“商品详情”这些高频页面的静态资源(JS、CSS、图片)悄悄加载到缓... 慕容璐莹 优化 2026-03-06 15:04:22 2 回答 73 浏览 Service Worker缓存策略中,动态路由页面怎么总是返回旧内容? 我在用Vue Router做单页应用时,给Service Worker设置了缓存策略,静态资源没问题,但动态路由页面(比如/user/123)更新后,客户端还是返回旧内容。尝试过用url.pathna... 程序猿东硕 优化 2026-02-14 22:52:27 1 回答 39 浏览 Service Worker 缓存策略怎么选才不会导致页面更新延迟? 我最近在项目里加了 Service Worker 做离线缓存,用了 cache-first 策略,结果发现用户每次发新版本后都看不到最新内容,得手动清除缓存才行。这体验太差了。 我试过改成 netwo... 设计师梓童 优化 2026-03-30 23:35:15 2 回答 55 浏览 HTTP缓存策略到底该怎么配才有效? 我给静态资源加了 Cache-Control: max-age=31536000,但每次刷新页面还是会重新请求,浏览器根本不走缓存,这是为啥? 我试过在 Nginx 里这样配置: location ~... 书生シ米阳 优化 2026-03-23 03:54:22 1 回答 57 浏览 Webpack打包后怎么分析bundle里到底包含了哪些模块? 我用Webpack打包完项目,发现vendor.js特别大,想看看里面到底塞了哪些依赖,但不知道怎么生成分析报告。试过加--analyze参数,但好像没生效? 网上说要用webpack-bundle-... 西门向景 前端 2026-03-12 17:00:21 1 回答 113 浏览 WebView缓存不生效,页面总是重新加载怎么办? 我在做Hybrid App时,用WebView加载H5页面,明明设置了缓存策略,但每次打开都重新请求资源,根本没走缓存,特别慢。 我试过在Android里设置webView.getSettings()... 燕燕酱~ 移动 2026-03-11 14:57:20 1 回答 53 浏览 Workbox缓存策略不生效,为什么离线还是加载不了页面? 我用Workbox的staleWhileRevalidate策略缓存了首页和静态资源,但手机断网后刷新页面还是白屏,控制台也没报错。是不是注册顺序有问题? 我的sw.js是这样写的: import {... 公孙艳清 移动 2026-03-11 14:37:18 1 回答 48 浏览 Service Worker 缓存策略怎么和 Vue 路由配合? 我用 Vue 做了个单页应用,加了 Service Worker 做缓存,但发现页面刷新后有时会卡在旧版本,尤其是切换路由后再刷新。是不是缓存策略没配对? 我试过在 sw.js 里用 CacheFir... UP主~皓宇 优化 2026-03-03 21:27:24 2 回答 46 浏览 Lighthouse跑分时为什么总提示“未建立缓存策略”? 我用 Lighthouse 测性能,每次都会报“未建立缓存策略”,但我的静态资源明明加了 Cache-Control: max-age=31536000 啊。是不是哪里没配对? 我用的是 Nginx,... 码农诗雅 前端 2026-03-03 11:13:20
检查一下你的构建工具(webpack/vite/rollup),输出文件名配置成 contenthash 模式就行。