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