progressive-web-apps - Service Worker JavaScript 更新频率(每 24 小时?)

标签 progressive-web-apps service-worker auto-update

根据 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/

相关文章:

javascript - 如何防止同一个 Service Worker 在多个页面上注册?

javascript - Service Worker 更新,但旧文件仍被缓存

c# - 如何自动更新 .net 应用程序?

node.js - Windows的 Electron 自动更新

Angular 5 PWA 未在离线模式下加载

javascript - 渐进式 Web 应用程序 HTTPS 到 HTTP 请求

ios - 作为主屏幕启动的 Web 应用程序在页面更改后切换到浏览器模式

python - 如何在多台服务器上实现 Web 应用程序的自动更新功能?

progressive-web-apps - PWA 忽略 Android 上的操作系统方向锁定

javascript - 通过本地网络托管 HTTPS