在工作箱中重新验证策略时使用过时进行预缓存

时间:2019-09-04 00:17:19

标签: javascript service-worker workbox sw-precache

问题

是否可以使用其他策略来预缓存文件?即重新验证时失效

或者,我应该只将脚本加载到DOM中,然后使用正确的策略在工作器中为其添加路由吗?

背景

这是一个很奇怪的情况,所以我会尽力解释一下...

  • 我们有两个仓库。 PWA 游戏
  • 两者都静态托管在同一CDN上
  • 由于游戏存储区是分开的,因此PWA无法访问游戏js捆绑包的版本。
  • 因此,我想出的解决方案是在Games build中生成未版本清单(game-manifest.js
  • 然后PWA将对该文件进行预缓存,遍历其内容,并将每个条目附加到现有的预缓存清单中
  • 但是,鉴于game-manifest.js没有修订并且没有进行哈希处理,我们需要依次应用 Network First Stale While Revalidate 策略在新版本可用时更新文件

请参阅以下代码,以更清楚地了解我要执行的操作:

import { precacheAndRoute } from 'workbox-precaching';

// Load the game manifest
// THIS FILE NEEDS TO BE PRECACHED, but under the strategy
// of stale while revalidate, or network first.
importScripts('example.cdn.com/games/js/game-manifest.js');

// Something like...
self.__gameManifest.forEach(entry => {
    self.__precacheManifest.push({
        url: entry
    });
});

// Load the assets to be precached
precacheAndRoute(self.__precacheManifest);

1 个答案:

答案 0 :(得分:1)

通常来说,使用workbox-precaching时无法交换替代策略。永远都是缓存优先的,precache清单中的版本信息控制更新的发生方式。

https://github.com/GoogleChrome/workbox/issues/1767

对该问题进行了更大的讨论

建议的操作过程是使用您喜欢的策略来显式设置runtime caching routes,并可能通过在install步骤中预先向其添加条目来“初始化”缓存。