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

根据MDN上的这个文档 :

之后每隔24小时左右下载一次。 它可能会被更频繁地下载,但是它必须每24小时下载一次以防止坏的脚本被烦扰太久。

Firefox和Chrome也一样吗? 或更新到服务工作人员只有当用户浏览网站时才会发生JavaScript?

注意: 从Firefox 57开始 ,默认行为已更改为考虑更新的服务工作者规范 。 在Firefox 57+中,在检查服务工作者脚本的更新时,默认情况下,HTTPcaching指令将被忽略。 以下说明仍然适用于Chrome,截至2017年10月。

每当您导航到服务工作人员范围内的新页面时,Chrome都会为传入navigator.serviceWorker.register()调用的JavaScript资源发出标准的HTTP请求。 我们假设它被命名为service-worker.js 。 该请求仅与导航结合使用,或者通过例如push事件唤醒服务人员。 没有一个后台进程每隔24小时重复一次每个服务工作者脚本,或者像这样自动化的东西。

这个HTTP请求将服从标准的HTTPcaching指令 ,只有一个例外(在下一段中有介绍)。 例如,如果你的服务器设置了适当的HTTP响应头,表明caching的响应应该使用1小时,那么在接下来的一个小时内,浏览器的请求service-worker.js将由浏览器的caching满足。 请注意,我们不是在谈论caching存储API ,这与这种情况不相关,而是标准的浏览器HTTPcaching 。

标准HTTPcaching规则的一个例外是24小时的事情,如果HTTPcaching中的service-worker.js条目的时间大于24小时,那么浏览器将总是访问networking。 所以在function上,使用1天或1周或1年的max-age没有区别 – 他们都将被视为max-age为1天。

浏览器供应商希望确保开发人员不会意外推出一个“破损”或有问题的service-worker.js ,该服务的max-age为1年,使用户不得不面对持续的,破坏的Web体验很长一段时间。 (你不能依靠你的用户知道清除他们的网站数据或转移 – 重新加载网站。)

有些开发人员更愿意使用响应标头显式提供service-worker.js ,从而导致所有HTTPcaching被禁用,这意味着每个导航都会为service-worker.js发出一个networking请求。 另一种方法可能是使用一个非常短暂的max-age一分钟 – 来提供某种程度的限制,以防万一来自单个用户的大量快速导航。 如果你真的想尽量减less请求,并确信你不会很快更新你的service-worker.js ,你可以自由设置24小时的max-age ,但是我build议你在你可能意外地需要重新部署。