禁用Service Worker注册代码后仍缓存资源的原因排查
解决Service Worker缓存反复出现的问题
嘿,我完全懂你现在的困惑——明明已经把页面里的Service Worker注册代码删掉了,Firefox里的static12缓存却像黏人的小尾巴一样,删了又自动冒出来。别慌,咱们一步步拆解原因和解决办法:
最核心的原因:旧Service Worker还在浏览器后台“偷偷干活”
Service Worker有个很特殊的特性:一旦注册成功,它不会因为你移除页面里的注册代码就自动消失。它会在浏览器后台持续运行,控制所有匹配其作用域的页面,哪怕你现在的页面已经没有注册逻辑了。之前注册的sw.js还在默默地执行它的缓存逻辑,一旦检测到static12缓存不存在,就会立刻重新创建出来。
针对性解决步骤:
- 打开Firefox开发者工具,切换到Application面板(旧版本可能在「Storage」→「Service Workers」路径下)。
- 在Service Workers列表里找到你的
sw.js,点击「Unregister」按钮彻底注销它。 - 关闭所有打开的
francoscarpa.com相关标签页——残留的页面可能还在让旧Service Worker保持活跃状态。
次要排查点:开发服务器或浏览器HTTP缓存搞鬼
有时候缓存的问题不止来自Service Worker,还可能是这些地方:
- 确认你已经重启了Eleventy开发服务器,确保注释掉
{% include "swRegistration.html" %}后的模板已经重新构建,没有旧页面被服务器缓存着提供给浏览器。 - 用硬刷新(Ctrl+Shift+R)加载页面,强制浏览器忽略HTTP缓存,获取最新的无注册代码的HTML文件。
额外检查:有没有其他页面残留注册逻辑
如果你的网站还有其他页面没更新,仍然保留着Service Worker注册代码,这些页面打开时会重新触发sw.js的注册,导致缓存再次出现。记得检查所有页面模板,确保都移除了注册代码。
最后验证:彻底清理后再测试
完成上面的步骤后,回到开发者工具的「Storage」→「Cache Storage」,手动删除static12缓存,然后重新打开网站。这时候应该不会再看到这个缓存自动重建了。
如果sw.js文件还在你的项目静态资源目录里,建议暂时重命名或者删除它,避免浏览器在某些极端情况下意外获取到脚本,引发不必要的麻烦。
内容的提问来源于stack exchange,提问作者Pine Code




