首页 > 解决方案 > Ionic 3 PWA 在 iOS 上无法顺利更新

问题描述

我们使用 Ionic 3 构建了一个 PWA,它是一个多页面应用程序。我们将它托管在带有 nginx 的 linux 服务器上,并使用 Laravel 作为后端

情况
我们已经看到 PWA 的更新并不总是即时的,我们的客户要求如果我们发布更新,这将立即自动发生。

我们尝试了什么

  1. 基于文件的缓存:我们的第一个想法是使用(老式?)缓存破坏的概念,因此在构建应用程序时,我们在文件名中使用随机哈希字符串。这最终导致了一个重大问题:一些 PWA 似乎保留了旧的index.html. 在我们的访问日志中,我们可以看到旧文件被请求。结果是人们在启动画面后会看到一个白屏。他们修复它的唯一方法是完全重新安装 PWA。
  2. 基于 URL 的缓存:我们设计了一个新计划:我们移入文件夹名称,而不是在文件名中使用随机哈希字符串。请求路径如下所示:./build/98312uj91eh9u2e/vendor.js. 使用 NGINX,我们删除哈希并提供相同的文件,因此它将从此路径返回文件:./build/vendor.js. 这导致了另一个文件不匹配的问题。所以有些用户会有部分旧版本和部分新闻版本,这会导致很多随机问题。
  3. 托管多个版本,希望它们会更新:除了造成很多混乱之外,这几乎没有任何作用。因为有些 PWA 永远不会更新,有些人会卡在旧版本上而看不到新功能。

我们当前的想法
不是使用静态 html 文件,而是考虑使用 javascript 对 PWA 的后端进行 API 调用。这将返回一个带有当前 PWA 版本的字符串。此版本将随机字符串包含在文件名中。这样,无论 index.html 更新如何,内容都是动态的,不会在描述问题之前引起问题。

那么问题是什么?
利用我们将使用 JavaScript 进行 API 调用的概念是否是一个好主意,或者这会导致我们尚未考虑的其他问题。

标签: ioscachingionic3progressive-web-apps

解决方案


推荐阅读