1

我正在根据这篇文章试验 HTML5 ServiceWorker API 。文章中提到

当用户导航到您的站点时,浏览器会尝试重新下载在后台定义服务工作者的脚本文件。如果 service worker 文件与它当前拥有的文件相比甚至有一个字节的差异,它就会认为它是“新的”。

从中我得出的结论是,如果我要更改工作者脚本文件中的任何内容,它将提示浏览器定义一个新版本,当引用旧版本工作者的所有页面都终止时,该版本将启动。


编辑:显然浏览器正在缓存serviceworker.js文件本身,这就是为什么没有选择新版本的原因。谁能告诉我如何避免缓存工作文件?我浏览了可用的在线演示(包括MDNW3C Webmob 的 GitHub 上的演示)

这是我的文件结构:

|- index.html
|- serviceworker.js // the actual worker
|- serviceworker-cache-polyfill.js
|- serviceworker-registration.js // contains the registration logic for the worker
|- style.css

我将缓存配置为包含以下 URL:

  • “/style.css”
4

2 回答 2

4

问题不在于 ServiceWorker 的配置,而在于我的服务器缓存了该文件。不能说我不觉得自己很愚蠢,我之前没有检查过这个。

为了将来参考,我使用http-server,它默认缓存所有文件 1 小时。您可以通过传入c参数来覆盖它。要完全禁用缓存,请传入-1

http-server -c-1

编辑下面的文章包含了关于如何使用 ServiceWorker 进行开发的一个很好的总结:

为了确保使用最新版本的 Service Worker 脚本,请遵循以下说明:

  1. 将本地服务器配置为不可缓存的 Service Worker 脚本(缓存控制:无缓存)
  2. 在您对服务工作者脚本进行更改后:
    1. 关闭所有指向您的 Web 应用程序的选项卡,但只有一个选项卡
    2. 点击 shift-reload 绕过服务人员,以确保剩余的选项卡不受服务人员的控制
    3. 点击重新加载,让更新版本的 Service Worker 控制页面。
于 2015-04-08T13:45:53.613 回答
1

这确实可以解释这种行为。更新逻辑确实尊重 HTTP 缓存控制标头,但最长为 24 小时(以避免卡在使用 Cache-control: 1 year 标头提供服务的损坏的软件上)。

于 2015-04-09T00:23:14.440 回答