html5怎么控制缓存策略_离线资源更新说明【说明】-html教程

HTML5的Cache-Control和Expires无法控制Service Worker缓存,因其仅影响浏览器基础缓存层,而SW缓存需手动管理;Workbox依赖revision哈希更新,手写SW须自行比对版本或hash。

HTML5 的 Cache-Control 和 Expires 不能控制 Service Worker 缓存

很多人以为在 HTML 中写 就能管住离线资源,其实它只影响 HTTP 请求的浏览器基础缓存层,对 Service Worker 自己 fetch 并 put 到 cacheStorage 中的资源完全无效。Service Worker 的缓存是手动管理的,得靠代码显式读写。

常见错误现象:
– 页面更新了,但旧 JS/CSS 仍从 cacheStorage 返回
– 清除浏览器缓存后,离线页还是旧版
– workbox.precaching 没触发更新,因为 revision 没变

  • HTTP 响应头(如 Cache-Control: max-age=3600)只约束「网络请求是否走浏览器磁盘缓存」,不约束 SW 的 caches.open()
  • 若用 Workbox,它默认靠文件内容哈希生成 revision 字段来判断资源是否变更;手写 SW 则必须自己比对版本号或 hash
  • 开发时禁用缓存(Chrome DevTools → Network → ✅ Disable cache)仅影响网络请求,不影响 caches.match() 查找结果

Service Worker 更新失败的三个典型卡点

SW 脚本本身更新失败,会导致整个离线策略停滞。不是“注册即生效”,而是有一套严格的状态流转机制。

  • 新 SW 文件必须与旧版字节不同(哪怕只多一个空格),否则浏览器直接忽略更新尝试
  • 旧 SW 正在控制页面时,新 SW 会进入 waiting 状态,不会自动激活;需调用 skipWaiting() 或等用户关闭所有页面再刷新
  • navigator.serviceWorker.register('/sw.js') 成功不代表激活成功;要用 controllerchange 事件监听实际接管时机

示例:在新 sw.js 开头加 self.skipWaiting(); 并监听 activate 事件清理旧 cache:

立即学习“前端免费学习笔记(深入)”;

夏夕资源网专注于CMS网站模板,主流语言整站网站源码下载,网站建设相关教程分享,好用的软件素材整合下载,提供一站式便捷自助服务。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"zy.lucklyus.top",如遇到无法解压的请联系管理员!
夏夕资源网-网站模板_免费源码_资源素材 » html5怎么控制缓存策略_离线资源更新说明【说明】-html教程
在线时间:12:00 - 22:00
关注微信公众号:微信公众号
站长邮箱:[email protected]
  • 运营天数: 1393+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4027703+
  • 本周更新: 0+
  • 最后更新: 2026-03-16

本站指数

×
  • 运营天数: 1393+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4027703+
  • 本周更新: 0+
  • 最后更新: 2026-03-16