Как добавить время истечения срока действия в кеши с помощью workbox-build generateSW?

Я использую метод generateSW workbox для создания сервис-воркера, и это конфигурация, которую я использую:

      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-buildgenerateSW?

1 ответ

не предназначен для автоматической очистки старых записей через некоторое время. Из документации :

Плагин будет проверять и удалять записи после каждого запроса или обновления кеша.

Одно замечание:

  • Поскольку IndexedDB открывается медленно, истечение срока действия не произойдет до тех пор, пока запрос не будет использован. Это означает, что просроченный запрос можно использовать один раз, но после этого он истечет.
  • Чтобы облегчить это, плагин будет проверять заголовок «Дата» кэшированного ответа, если он существует и дата может быть проанализирована, срок его действия истечет в зависимости от этого, поскольку он не требует поиска в IndexedDB.

Так maxAgeSecondsявляется возможностью контроля времени до того , как кэшируются запрос несвежий, а старое удаление записи инициируется по запросу.

Чтобы проверить и удалить старые записи после любого запроса, используйте maxEntriesвариант :

После использования кешированного ответа или добавления нового запроса в кеш плагин будет проверять настроенный кеш и следить за тем, чтобы количество кэшированных записей не превышало лимит. Если это так, самые старые записи будут удалены.

Если вам все еще нужно очистить после любого запроса и в зависимости от времени, а не количества записей, вам нужно будет создать свой собственный плагин на основе ExpirationPlugin и лучше использовать режим инъекции манифеста.

Другие вопросы по тегам