根据有关MDN的文档:
之后,大约每24小时下载一次。它可能会更频繁地下载,但必须下载每24h,以防止不良脚本被恼人的太久。
Firefox和Chrome是否一样?还是仅当用户导航到站点时才更新到Service Worker JavaScript?
Answers:
注意:从Firefox 57和Chrome 68开始,以及支持服务工作者的Safari和Edge版本,默认行为已更改,以适应更新的服务工作者规范。在那些浏览器中,默认情况下,在检查Service Worker脚本中的更新时将忽略HTTP缓存指令。以下说明仍然适用于Chrome和Firefox的早期版本。
每次您导航到服务人员范围内的新页面时,Chrome都会对传递给navigator.serviceWorker.register()
调用的JavaScript资源进行标准的HTTP请求。假设它名为service-worker.js
。仅与导航结合或通过例如push
事件唤醒服务人员时才发出此请求。有没有说每个重新提取服务人员脚本每24小时,或任何自动化这样的一个后台进程。
该HTTP请求将遵循标准的HTTP缓存指令,但有一个例外(下一节将对此进行介绍)。例如,如果您的服务器设置了适当的HTTP响应标头,该标头指示应使用缓存的响应1个小时,则在下一小时内,浏览器的请求service-worker.js
将由浏览器的缓存满足。请注意,我们并不是在讨论Cache Storage API,在这种情况下,它无关紧要,而是标准的浏览器HTTP缓存。
标准HTTP缓存规则的一个例外(这就是24小时的用处)是,如果service-worker.js
HTTP缓存中的条目的生存时间大于24小时,浏览器将始终访问网络。因此,从功能max-age
上讲,使用1天或1周或1年没有区别-它们都将被视为max-age
1天。
浏览器厂商要确保开发商不小心推出一个“破”或越野车service-worker.js
的是它和被服务max-age
1年,留什么可能是的很长一段时间的持久,破网络体验的用户。(您不能依靠您的用户知道清除其站点数据或转移-重新加载站点。)
一些开发人员更喜欢service-worker.js
使用响应标头显式地提供其响应标头,从而导致所有HTTP缓存都被禁用,这意味着service-worker.js
对每个导航都提出了网络请求。另一种方法可能是使用非常短的时间(max-age
例如一分钟)来提供某种程度的限制,以防单个用户有大量的快速导航。如果您确实希望最小化请求,并且确信不会service-worker.js
很快进行更新,则可以随意设置max-age
24小时,但是我建议您减少一些您意外需要重新部署的机会。
fetch
当页面请求服务工作者脚本进行注册时,不会触发服务工作者的事件处理程序。