服务人员JavaScript更新频率(每24小时一次)


69

根据有关MDN的文档

之后,大约每24小时下载一次。它可能会更频繁地下载,但必须下载每24h,以防止不良脚本被恼人的太久。

Firefox和Chrome是否一样?还是仅当用户导航到站点时才更新到Service Worker JavaScript?

Answers:


171

注意:从Firefox 57Chrome 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.jsHTTP缓存中的条目的生存时间大于24小时,浏览器将始终访问网络。因此,从功能max-age上讲,使用1天或1周或1年没有区别-它们都将被视为max-age1天。

浏览器厂商要确保开发商不小心推出一个“破”或越野车service-worker.js的是它和被服务max-age1年,留什么可能是的很长一段时间的持久,破网络体验的用户。(您不能依靠您的用户知道清除其站点数据或转移-重新加载站点。)

一些开发人员更喜欢service-worker.js使用响应标头显式地提供其响应标头,从而导致所有HTTP缓存都被禁用,这意味着service-worker.js对每个导航都提出了网络请求。另一种方法可能是使用非常短的时间(max-age例如一分钟)来提供某种程度的限制,以防单个用户有大量的快速导航。如果您确实希望最小化请求,并且确信不会service-worker.js很快进行更新,则可以随意设置max-age24小时,但是我建议您减少一些您意外需要重新部署的机会。


2
谢谢杰夫很好的解释。澄清了所有查询。
shailesh mishra

1
如果在提取中拦截并缓存了服务工作者调用,会发生什么情况。一天之后也到期吗?
Pankaj

3
fetch当页面请求服务工作者脚本进行注册时,不会触发服务工作者的事件处理程序。
杰夫·波斯尼克

5
>他们将被视为最大年龄为1天。这难道不等于服务人员的目的吗?如果我的应用程序在24小时内没有连接到互联网,它会停止工作,我对此无能为力吗?所有这些只是为了使用户不必知道有关清除其缓存的信息,也可以避免开发人员从其URL中添加缓存无效化器。我想念什么吗?
西蒙(Simon)

8
“如果我的应用程序在24小时内与互联网断开连接,它将停止运行”是不正确的。每当您离线时,您先前缓存的内容以及服务工作者JS缓存的文件将继续使用。这篇文章包含与您何时在线有关的详细信息,以及检查更新的频率。
杰夫·波斯尼克
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.