Javascript 我应该如何更新服务人员和缓存的PWA文件
因此,在我当前的系统中,每当我创建一个javascript包时,我都会在文件名中添加一个哈希值,用于生产构建。我的index.html中没有CDN缓存,因此每当出现新的构建时,就会创建一个指向新的哈希javascript文件名的新index.html。无论何时发生新部署,这都能很好地使捆绑包的缓存失效(代价是我的非常小的index.html没有被缓存) 我想让我的应用程序作为PWA工作,我想知道当我部署应用程序的新版本时,如何使现有用户的缓存失效。以下是问题:Javascript 我应该如何更新服务人员和缓存的PWA文件,javascript,service-worker,progressive-web-apps,cdn,Javascript,Service Worker,Progressive Web Apps,Cdn,因此,在我当前的系统中,每当我创建一个javascript包时,我都会在文件名中添加一个哈希值,用于生产构建。我的index.html中没有CDN缓存,因此每当出现新的构建时,就会创建一个指向新的哈希javascript文件名的新index.html。无论何时发生新部署,这都能很好地使捆绑包的缓存失效(代价是我的非常小的index.html没有被缓存) 我想让我的应用程序作为PWA工作,我想知道当我部署应用程序的新版本时,如何使现有用户的缓存失效。以下是问题: serviceworker.js需
我似乎找不到关于如何处理这些问题的好指南,感觉基于一些选项(比如每X时间重试一次),浏览器应该可以为我做很多工作。是否有一些神奇的HTTP头我不知道?我有同样的问题,我今天解决了这个问题。您的
index.html
应该由服务人员缓存以进行脱机工作。当用户打开PWA时,所有文件都将从缓存中加载,加载完成后,将从网络中检索service worker,如果有新的service worker,则将下载所有新文件,并安装新的service worker并等待激活。您需要刷新PWA以激活新的服务人员并实际使用更新的应用程序
我使用了article并创建了我的新服务人员(而不是CreateReact应用程序中的默认服务人员)。本文还解释了检测新的service worker安装,以便您可以通知用户有一个新的更新可用,并刷新PWA
我希望这能对您有所帮助。我想避免使用Workbox,我觉得它太神奇了。我可以看到,它保留了每个缓存文件的“修订版”,就像我在问题4中所想的那样。我希望在serviceworkers中有一种“标准”的方法使缓存失效,但显然没有。这意味着我需要滚动我自己的.oh顺便问一下,你知道window.location.reload(true)是否绕过了service worker缓存吗?我想最简单的解决方案是在未缓存的静态文件中有一个内部版本号,然后对照service worker中的版本号进行检查。每当它发生更改时,只需使整个缓存无效并注销工作进程。一个更智能的解决方案将能够在缓存中保留未更改的文件。我想至少我可以在缓存中保留图像,如果它们的文件名有像IOS中的JS bundlesIn那样的散列,并且当安装PWA时,应用了另一个级别的内存缓存,我使用
window.location.reload(true)
来清除它。我不确定服务工作者缓存。@AliSabziNezhad不是reload(true)
弃用的吗?它还能用吗?当我使用它时,我仍然有缓存文件