如何使用workbox build generatesw向缓存添加过期时间?

vybvopom  于 2021-09-23  发布在  Java
关注(0)|答案(1)|浏览(529)

我使用workbox generatesw方法生成service worker,这是我使用的配置:

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后清理缓存?

sqxo8psd

sqxo8psd1#

maxAgeSeconds 并不意味着在一段时间后自动清理旧条目。从文件中:
插件会在每次请求或缓存更新后检查并删除条目。
有一点需要注意:
因为打开indexeddb很慢,所以直到使用请求之后才会发生过期。这意味着过期的请求可以使用一次,但之后将过期。
为了缓解这种情况,插件将检查缓存响应的“date”头,如果存在,并且可以解析该日期,它将基于此过期,因为它不需要indexeddb查找。
所以 maxAgeSeconds 是一个选项,用于控制缓存请求过期之前的时间,并由请求触发旧条目删除。
要在任何请求后检查和删除旧条目,请使用 maxEntries 选项:
使用缓存响应或向缓存中添加新请求后,插件将查看配置的缓存,并确保缓存条目的数量不超过限制。如果是,最早的条目将被删除。
如果您仍然需要在任何请求之后根据时间而不是条目数进行清理,那么您需要根据创建自己的插件 ExpirationPlugin 更好地使用注入清单模式。

相关问题