1

workboxSW.precache默认是cacheFirst,有没有办法改变它的策略?

workboxSW.precache(myPrecacheItems);

或者有没有办法在预缓存项上定义缓存名称,因此可以通过指定路由来覆盖预缓存项?

4

2 回答 2

0

虽然我不知道是否可以更改 workbox.precache 策略,但我相信您想要做的是用服务工作者安装的一些页面填充您的路由缓存。

为此,首先使用具有已定义缓存名称的 staleWhileRevalidate 策略创建您的工作箱路由:

workbox.routing.registerRoute(
    /.*\.html/,
    workbox.strategies.staleWhileRevalidate({  
        cacheName: 'MY-CACHE',
    })
);

在 SW 安装中为您定义的路由预缓存一些 url。将此代码添加到您的 Service Worker:

self.addEventListener('install', (event) => {
    const urls = ['https://url1.html','https://url2.html','etc'];
    event.waitUntil(caches.open('MY-CACHE').then((cache) => cache.addAll(urls)));
});

其中MY-CACHEstaleWhileRevalidate策略中缓存集的名称。

于 2018-07-14T16:08:11.237 回答
0

precache 基本上适用于您的静态资产,如 css/js 等。对于这些资产,即使您不附加散列,工作箱也会在预缓存时附加散列。

所以如果你改变这些,一个新的软件将发挥作用,新的捆绑包将被提供。

而 staleWhileRevalidate 是一种运行时策略(主要用于动态数据,例如 API)。您可以在工作箱中为这些添加运行时处理程序并期望它们正常工作。

如果您仍然认为需要带有运行时策略的预缓存,请详细说明您的用例。

于 2017-09-22T13:56:14.893 回答