如果有新版本,如何强制 SPA 客户端进行硬刷新?

Dav*_*lsh 2 javascript single-page-application progressive-web-apps

我有一个单页应用程序,需要客户端使用最新版本。缓存是积极的,因此等待它们失效是不可行的。

有没有一种方法可以告诉客户端查看某个资源(比如 build.txt),如果该资源包含的内部版本号大于当前加载的版本号,则使缓存无效并刷新?

Jon*_*Job 5

由于这个问题已被标记为,progressive-web-apps我将假设它正在安装一个服务工作者,这就是积极缓存资源的原因。

这篇文章虽然显示了 PWA 的“新版本可用”弹出窗口 - 即使这不是您想要的特定行为,但它解释了很多有关服务工作人员如何更新的信息。

这个问题/答案还讨论了检查服务工作人员更新的频率。

这个问题/答案讨论了始终使用skipWaiting以使客户立即了解最新情况的优点/缺点。

编辑:如果您只是处理常规 HTTP 缓存,请在检测到服务器上有更新版本时尝试使用location.reload(true)(重新加载设置的标志)。forcedReload过去,我通过在构建/发布时将版本号放入 js 代码中,并让服务器将其版本号作为标头添加到每个响应中来完成此操作。在 ajax 调用后对值进行简单比较可以确认 ui 和服务器版本号是否匹配,并在不匹配时采取措施。