浏览器缓存需兼顾首屏速度与内容时效:静态资源用contenthash+immutable强缓存,html禁长期缓存,api分层控制,service worker实现弱网降级。

在网速较慢的移动网络环境中,浏览器缓存是提升首屏加载速度、降低重复请求失败率、节省用户流量的关键手段。重点不是“激进地缓存一切”,而是让关键资源稳住、让动态内容可控、让更新机制可靠——尤其要避免因缓存策略不当导致白屏、功能异常或用户看不到最新内容。
优先保障静态资源长期强缓存
JS、CSS、字体、图标等不常变更的资源,应通过 HTTP 响应头实现无需验证的强缓存:
- Webpack 构建时使用 [contenthash] 生成文件名(如
app.8a2f1c4e.js),确保内容变则 URL 变 - Nginx 或 CDN 配置响应头:
Cache-Control: public, max-age=31536000, immutable(1年,且不可被 revalidation 覆盖) - 务必避开
[hash]或[chunkhash],否则 CSS 与 JS 更新不同步会导致样式错乱或脚本执行失败
HTML 必须禁用长期缓存
HTML 是缓存链的入口,一旦缓存过久,即使 JS/CSS 已更新,用户仍加载旧 HTML,引用的仍是过期哈希文件——这是弱网下最常见的白屏原因:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 根目录
index.html的响应头设为:Cache-Control: no-cache或max-age=0 - 若使用 Nginx,可配置:
location = /index.html { add_header Cache-Control "no-cache"; } - 确保
HtmlWebpackPlugin(或 Vite/Vue CLI)自动注入带哈希的新资源链接,模板中不写死路径
对 API 数据实施分层缓存控制
移动端弱网下接口超时高发,但直接缓存响应可能引发数据陈旧问题。建议按数据类型分级处理:
-
静态配置类(如国家列表、App 版本规则):响应头加
Cache-Control: public, max-age=86400(24 小时) -
用户态数据(如登录态、购物车):用
Cache-Control: private, max-age=300(5 分钟),配合 ETag 或 Last-Modified 实现协商缓存 -
实时性要求高的操作(如支付结果、消息未读数):强制禁用缓存:
Cache-Control: no-store, must-revalidate
用 Service Worker 补足弱网容错能力
当网络极不稳定时,HTTP 缓存可能无法命中(如 DNS 失败、TCP 连接中断),Service Worker 可接管请求并返回离线缓存:
- 注册后在
install阶段预缓存核心资源(如主 JS、关键 CSS、兜底页面) - 在
fetch事件中实现“网络优先 + 缓存降级”策略:
先尝试 fetch,失败则从 cache.match 返回已缓存版本;成功则更新缓存 - 注意:Service Worker 要求 HTTPS(生产环境)或 localhost(开发),且缓存更新需触发 skipWaiting + clients.claim
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










