Service Worker 缓存脚本尝试加载旧数据
Service Worker Cached Script tries to load old data
在我的项目中,我通过 import().then.
异步加载 json 文件
有时,当新内容可用但尚未应用时,旧的缓存脚本包会尝试按旧名称加载 json 文件(因为捆绑会在每次构建时生成新的哈希名称) .但是这些文件不再可用了。
我看到很多应用程序使用 toast 消息通知用户更新,以便他们可以刷新,但是有没有其他方法可以解决这个问题?
没有。没有自动处理此问题的方法。
根据你的问题,我认为你的 SW 配置使用了缓存优先策略。由于这是缓存优先策略,因此您描述的情况可能会发生并且有时会发生。
您有两个选择:
也预缓存所有 JSON 文件。这样,当旧的 JS 代码尝试异步获取 JS 文件时,它们将从 SW 的缓存中获取,而不是通过网络获取。客户端获取 整个 应用程序的旧版本,包括 JSON 个文件。
实施某种复杂的(ish)自定义逻辑,尝试获取文件并在错误情况下与您的服务器对话,获取正确的文件名,然后再次尝试使用新文件名。您可以轻松生成一个列出所有当前 JSON 文件名的文件。
这两个选项有不同的陷阱,它们可能会或可能不会工作,具体取决于应用程序。
在我的项目中,我通过 import().then.
异步加载 json 文件有时,当新内容可用但尚未应用时,旧的缓存脚本包会尝试按旧名称加载 json 文件(因为捆绑会在每次构建时生成新的哈希名称) .但是这些文件不再可用了。
我看到很多应用程序使用 toast 消息通知用户更新,以便他们可以刷新,但是有没有其他方法可以解决这个问题?
没有。没有自动处理此问题的方法。
根据你的问题,我认为你的 SW 配置使用了缓存优先策略。由于这是缓存优先策略,因此您描述的情况可能会发生并且有时会发生。
您有两个选择:
也预缓存所有 JSON 文件。这样,当旧的 JS 代码尝试异步获取 JS 文件时,它们将从 SW 的缓存中获取,而不是通过网络获取。客户端获取 整个 应用程序的旧版本,包括 JSON 个文件。
实施某种复杂的(ish)自定义逻辑,尝试获取文件并在错误情况下与您的服务器对话,获取正确的文件名,然后再次尝试使用新文件名。您可以轻松生成一个列出所有当前 JSON 文件名的文件。
这两个选项有不同的陷阱,它们可能会或可能不会工作,具体取决于应用程序。