workbox-expiration

Dość powszechne jest wprowadzanie w pamięci podręcznej ograniczeń dotyczących czasu, przez jaki elementy mają być przechowywane w pamięci podręcznej, lub liczby elementów w pamięci podręcznej. Workbox udostępnia tę funkcję za pomocą wtyczki workbox-expiration, która pozwala ograniczyć liczbę wpisów w pamięci podręcznej lub usunąć wpisy, które były w pamięci podręcznej od dłuższego czasu.

Ogranicz liczbę wpisów w pamięci podręcznej

Aby ograniczyć liczbę wpisów przechowywanych w pamięci podręcznej, możesz użyć opcji maxEntries w ten sposób:

import {registerRoute} from 'workbox-routing';
import {CacheFirst} from 'workbox-strategies';
import {ExpirationPlugin} from 'workbox-expiration';

registerRoute(
  ({request}) => request.destination === 'image',
  new CacheFirst({
    cacheName: 'image-cache',
    plugins: [
      new ExpirationPlugin({
        maxEntries: 20,
      }),
    ],
  })
);

Dzięki temu wtyczka zostanie dodana do tej trasy. Po użyciu odpowiedzi z pamięci podręcznej lub dodaniu do niej nowego żądania wtyczka sprawdzi skonfigurowaną pamięć podręczną i upewni się, że liczba wpisów w pamięci podręcznej nie przekracza limitu. Jeśli tak, najstarsze wpisy zostaną usunięte.

Ogranicz wiek wpisów w pamięci podręcznej

Aby ograniczyć czas przechowywania żądania, możesz określić maksymalny wiek w sekundach za pomocą opcji maxAgeSeconds, na przykład:

import {registerRoute} from 'workbox-routing';
import {CacheFirst} from 'workbox-strategies';
import {ExpirationPlugin} from 'workbox-expiration';

registerRoute(
  ({request}) => request.destination === 'image',
  new CacheFirst({
    cacheName: 'image-cache',
    plugins: [
      new ExpirationPlugin({
        maxAgeSeconds: 24 * 60 * 60,
      }),
    ],
  })
);

Wtyczka sprawdza i usuwa wpisy po każdym żądaniu lub aktualizacji pamięci podręcznej.

Zaawansowane użycie

Jeśli chcesz używać logiki wygaśnięcia niezależnie od innego modułu Workbox, możesz to zrobić za pomocą klasy CacheExpiration.

Aby zastosować ograniczenia do pamięci podręcznej, utwórz wystąpienie CacheExpiration dla pamięci podręcznej, którą chcesz kontrolować, w ten sposób:

import {CacheExpiration} from 'workbox-expiration';

const cacheName = 'my-cache';
const expirationManager = new CacheExpiration(cacheName, {
  maxAgeSeconds: 24 * 60 * 60,
  maxEntries: 20,
});

Po każdej aktualizacji wpisu w pamięci podręcznej musisz wywołać metodę updateTimestamp(), aby zaktualizować jego wiek.

await openCache.put(request, response);

await expirationManager.updateTimestamp(request.url);

Jeśli zechcesz, aby określony zbiór wpisów utracił ważność, możesz wywołać metodę expireEntries(), co spowoduje wymuszenie konfiguracji maxAgeSeconds i maxEntries.

await expirationManager.expireEntries();

Typy

CacheExpiration

Klasa CacheExpiration pozwala określić datę wygaśnięcia lub limit liczby odpowiedzi przechowywanych w Cache.

Właściwości

  • konstruktor

    void

    Aby utworzyć nową instancję CacheExpiration, musisz podać co najmniej jedną z właściwości config.

    Funkcja constructor wygląda tak:

    (cacheName: string, config?: CacheExpirationConfig) => {...}

    • cacheName

      string,

      Nazwa pamięci podręcznej, do której chcesz zastosować ograniczenia.

    • konfiguracja

      Wartość CacheExpirationConfig opcjonalna

  • usuń

    void

    Usuwa magazyn obiektów IndexedDB używany do śledzenia metadanych wygaśnięcia pamięci podręcznej.

    Funkcja delete wygląda tak:

    () => {...}

    • returns

      Promise<void>

  • expireEntries

    void

    Wygasa wpisy dotyczące danej pamięci podręcznej i podanych kryteriów.

    Funkcja expireEntries wygląda tak:

    () => {...}

    • returns

      Promise<void>

  • isURLExpired

    void

    Pozwala sprawdzić, czy adres URL wygasł przed jego użyciem.

    Wymaga to wyszukania w IndexedDB, więc może działać wolno.

    Uwaga: ta metoda nie spowoduje usunięcia wpisu z pamięci podręcznej. Wywołaj metodę expireEntries(), aby usunąć wpisy indexDB i Cache.

    Funkcja isURLExpired wygląda tak:

    (url: string) => {...}

    • URL

      string,

    • returns

      Promise<boolean>

  • updateTimestamp

    void

    Zaktualizuj sygnaturę czasową danego adresu URL. Dzięki temu podczas usuwania wpisów na podstawie ich maksymalnej liczby ostatnio używane są prawidłowe lub w momencie wygaśnięcia, sygnatura czasowa będzie aktualna.

    Funkcja updateTimestamp wygląda tak:

    (url: string) => {...}

    • URL

      string,

    • returns

      Promise<void>

ExpirationPlugin

Tej wtyczki można używać w workbox-strategy, aby regularnie egzekwować limit wieku lub liczby żądań w pamięci podręcznej.

Można jej używać tylko w przypadku instancji workbox-strategy z zestawem niestandardowej właściwości cacheName. Innymi słowy, nie można jej używać do wygasania wpisów w strategii, która korzysta z domyślnej nazwy pamięci podręcznej środowiska wykonawczego.

Za każdym razem, gdy jest używana lub aktualizowana odpowiedź z pamięci podręcznej, wtyczka sprawdza powiązaną pamięć podręczną i usuwa wszelkie stare lub dodatkowe odpowiedzi.

Gdy używasz maxAgeSeconds, odpowiedzi można użyć raz po wygaśnięciu, ponieważ oczyszczanie związane z wygaśnięciem konta nastąpi dopiero po wykorzystaniu odpowiedzi z pamięci podręcznej. Jeśli odpowiedź zawiera nagłówek „Date”, przeprowadzana jest minimalna weryfikacja ważności ważności, a odpowiedź nie zostanie od razu użyta.

Podczas korzystania z maxEntries najwcześniej żądany wpis jest najpierw usuwany z pamięci podręcznej.

Właściwości

  • konstruktor

    void

    Funkcja constructor wygląda tak:

    (config?: ExpirationPluginOptions) => {...}

  • deleteCacheAndMetadata

    void

    Jest to metoda pomocnicza, która wykonuje 2 operacje:

    • Usuwa wszystkie bazowe instancje pamięci podręcznej powiązane z tą instancją wtyczki, wywołując w Twoim imieniu funkcję caches.delete().
    • Usuwa z IndexedDB metadane używane do śledzenia szczegółów wygaśnięcia każdej instancji Cache.

    W przypadku korzystania z daty ważności pamięci podręcznej preferowane jest wywołanie tej metody zamiast bezpośredniego wywoływania metody caches.delete(), ponieważ zapewni to czyste usunięcie metadanych IndexedDB i otwartych instancji IndexedDB.

    Pamiętaj, że jeśli nie używasz daty ważności pamięci podręcznej w przypadku danej pamięci podręcznej, wystarczy wywołać metodę caches.delete() i podać jej nazwę. W takim przypadku do czyszczenia nie jest wymagana specyficzna dla Workbox metoda.

    Funkcja deleteCacheAndMetadata wygląda tak:

    () => {...}

    • returns

      Promise<void>

ExpirationPluginOptions

Właściwości

  • matchOptions

    CacheQueryOptions opcjonalnie

  • maxAgeSeconds

    Liczba opcjonalnie

  • maxEntries

    Liczba opcjonalnie

  • purgeOnQuotaError

    wartość logiczna opcjonalna