根据 this doc on MDN :
After that it is downloaded every 24 hours or so. It may be downloaded more frequently, but it must be downloaded every 24h to prevent bad scripts from being annoying for too long.
Firefox 和 Chrome 也是如此吗?或者只有当用户导航到站点时才会更新 Service Worker javascript?
最佳答案
注意:As of Firefox 57 ,和 Chrome 68以及支持服务工作线程的 Safari 和 Edge 版本,默认行为已更改为考虑 updated service worker specification 。在这些浏览器中,在检查 Service Worker 脚本是否有更新时,默认情况下将忽略 HTTP 缓存指令。以下描述仍然适用于早期版本的 Chrome 和 Firefox。
每次您导航到 Service Worker 范围内的新页面时,Chrome 都会对传入到 navigator.serviceWorker.register 的 JavaScript 资源发出标准 HTTP 请求()
调用。我们假设它的名称为 service-worker.js
。此请求仅在与导航结合使用时发出,或者在通过诸如推送事件之类的方式唤醒 Service Worker 时发出。 没有后台进程会每 24 小时重新获取每个服务工作线程脚本,或者类似的自动化进程。
此 HTTP 请求将遵循标准 HTTP cache directives ,但有一个异常(exception)(下一段将介绍)。例如,如果您的服务器设置了适当的 HTTP 响应 header ,指示缓存的响应应使用 1 小时,那么在接下来的一小时内,浏览器对 service-worker.js
的请求将由浏览器的缓存。请注意,我们不是谈论 Cache Storage API ,这与这种情况无关,而是 standard browser HTTP caching .
标准 HTTP 缓存规则的一个异常(exception)(这就是 24 小时规则的来源)是,如果 service-worker.js
条目的年龄已过,浏览器将始终访问网络在HTTP缓存中的时间大于24小时。因此,从功能上来说,使用 1 天、1 周或 1 年的 max-age
没有区别 — 它们都会被视为 max-age
1 天。
浏览器供应商希望确保开发人员不会意外推出“损坏”或有缺陷的 service-worker.js
,其服务的 max-age
为1 年,在很长一段时间内给用户带来可能是持续的、 splinter 的网络体验。 (您不能指望用户知道清除其网站数据或重新加载网站。)
一些开发人员更喜欢使用响应 header 显式为其 service-worker.js
提供服务,从而导致所有 HTTP 缓存被禁用,这意味着对 service-worker.js
的网络请求> 是为每一个导航而设计的。另一种方法可能是使用非常非常短的 max-age(例如一分钟)来提供某种程度的限制,以防单个用户进行大量快速导航。如果您确实想最大程度地减少请求,并且确信不会很快更新您的 service-worker.js
,您可以随意将 max-age
设置为24 小时,但我建议您选择较短的时间,以防您意外需要重新部署。
关于progressive-web-apps - Service Worker JavaScript 更新频率(每 24 小时?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38843970/