我正在尝试基于this article的HTML5 ServiceWorker API。在文章中提到了
当用户导航到您的网站时,浏览器会尝试重新下载 在后台定义服务工作者的脚本文件。如果 比较服务工作文件中甚至存在字节差异 它目前拥有的东西,它认为它是新的'。
我从中得出结论,如果我在工作人员的脚本文件中更改任何,它将提示浏览器定义一个新版本,当所有引用旧版本的页面都会启动工人的版本被终止。
<小时/> 修改:显然浏览器正在缓存
serviceworker.js
文件本身,这就是为什么新版本没有被选中。谁能告诉我如何避免缓存工作文件?我已经在线查看了可用的演示文稿(包括MDN和W3C Webmob's GitHub上的演示文稿)
这是我的文件结构:
|- index.html
|- serviceworker.js // the actual worker
|- serviceworker-cache-polyfill.js
|- serviceworker-registration.js // contains the registration logic for the worker
|- style.css
我将缓存配置为包含以下网址:
答案 0 :(得分:3)
问题不在于ServiceWorker的配置,而在于我的服务器缓存了该文件。不能说我不觉得愚蠢我没有早点检查过。
为了将来参考,我使用http-server,它默认缓存所有文件1小时。您可以通过传入c
参数来覆盖它。要完全禁用缓存,请传入-1
:
http-server -c-1
修改以下article包含有关如何使用ServiceWorker进行开发的完整摘要:
为了保证您的服务工作者的最新版本 正在使用脚本,请按照以下说明操作:
- 将本地服务器配置为以不可缓存的方式提供Service Worker脚本(缓存控制:无缓存)
- 更改服务后 工人脚本:
醇>
- 关闭除了一个指向您的Web应用程序的选项卡之外的所有选项卡
- 点击shift-reload以绕过服务工作者以确保 剩下的标签不在服务工作者的控制之下
- 命中 重新加载以让较新版本的Service Worker控制 页。
答案 1 :(得分:1)
这确实可以解释这种行为。更新逻辑确实尊重HTTP缓存控制标题,但最多24小时(以避免遇到使用Cache-control:1年标头提供的损坏的SW)。