如何使用workbox build generateSW将过期时间添加到缓存



我使用workbox generateSW方法生成服务工作者,这是我使用的配置:

const workbox = require("workbox-build");
workbox.generateSW({
globDirectory: "./",
globIgnores: ["node_modules/**", "**/generator.js", "**/sw.js"],
globPatterns: ["**/*.{css,js}"],
swDest: "./sw.js",
sourcemap: false,
cleanupOutdatedCaches: true,
clientsClaim: true,
runtimeCaching: [
{
urlPattern: /.(?:html|htm|xml)$/,
handler: "StaleWhileRevalidate",
options: {
cacheName: "runtimecaching name",
expiration: {
maxAgeSeconds: 1,
},
},
},
],
});

我找不到删除文档中旧缓存的过期时间,所以我如何在使用workbox build generateSW一段时间后清理缓存?

maxAgeSeconds并不意味着在一段时间后自动清理旧条目。来自文件:

插件将在每次请求或缓存更新后检查并删除条目。

需要注意的一点是:

  • 因为打开IndexedDB的速度很慢,所以在使用请求之后才会过期。这意味着过期的请求可以使用一次,但之后就会过期
  • 为了缓解这种情况,插件将检查";日期";缓存响应的头,如果存在并且可以解析日期,它将基于此过期,因为它不需要IndexedDB查找

因此,maxAgeSeconds是控制缓存请求失效前时间的选项,旧条目删除由请求触发。

要在任何请求后检查并删除旧条目,请使用maxEntries选项:

使用缓存响应或向缓存添加新请求后,插件将查看配置的缓存,并确保缓存项的数量不会超过限制。如果是,最旧的条目将被删除

如果您仍然需要在任何请求后根据时间而不是条目数量进行清理,则需要基于ExpirationPlugin创建自己的插件,并更好地使用注入清单模式。

最新更新