工作箱:清理缓存

Workbox: clean up cache

Workbox 似乎没有清理旧缓存。例如,如果我指定这样的缓存版本:

var version = 'v2';
workbox.core.setCacheNameDetails({
  suffix: version
});

...我原以为工作箱会在新服务工作者激活后清理旧版本的缓存,但我的缓存存储如下所示:

我自己手动清理缓存安全吗?例如在我的服务人员中:

self.addEventListener('activate', function(event) {
  event.waitUntil(
    caches
      .keys()
      .then(keys => keys.filter(key => !key.endsWith(version)))
      .then(keys => Promise.all(keys.map(key => caches.delete(key))))
  );
});

您正在将 suffix 属性 值更改为您作为版本的字符串。但 Workbox 仅使用它来命名缓存桶。

From the Workbox docs.

The main use case for the prefix and suffix is that if you use Workbox for multiple projects and use the same localhost for each project, setting a custom prefix for each module will prevent the caches from conflicting with each other.

Workbox 不认为 x-v2x-v1 的新替代品。

您可以很好地使用缓存逐出策略,因为 Workbox 将不再使用以前命名的缓存。

但是您不需要使用 suffix 来对资产进行版本控制。 Workbox 有许多工具可确保正确更新资产。另外,您的 suffix 实施将始终以新缓存开始并下载所有内容。

precache

Precache 对资产进行了修订,因此当资产发生变化时,您生成一个新的构建,部署更改的资产将更新,而未更改的资产将保持不变。

strategies

策略是完成大部分工作的地方。当您定义路由时,您将定义最适合该类型资产的缓存策略。 staleWhileRevalidate 是一种很好的方法,其中将使用 on-device 缓存,但 Workbox 也会并行访问网络并检查该资源是否有更新。

expiration

您还可以确保在旧资产超过定义的到期时间时清除它们。