workbox-expiration

Często zdarza się, że użytkownicy chcą nałożyć ograniczenia na pamięć podręczną, określając czas przechowywania elementów w pamięci podręcznej lub liczbę elementów, które mają być w niej przechowywane. 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 przechowywane w pamięci podręcznej przez długi czas.

Ograniczanie liczby wpisów w pamięci podręcznej

Aby ograniczyć liczbę pozycji 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,
      }),
    ],
  })
);

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

Ograniczanie wieku wpisów w pamięci podręcznej

Aby ograniczyć czas przechowywania żądania w pamięci podręcznej, możesz określić maksymalny wiek w sekundach za pomocą opcji maxAgeSeconds 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({
        maxAgeSeconds: 24 * 60 * 60,
      }),
    ],
  })
);

Po każdej prośbie lub aktualizacji pamięci podręcznej wtyczka sprawdza i usuwa wpisy.

Zaawansowane użycie

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

Aby zastosować ograniczenia do pamięci podręcznej, utwórz instancję CacheExpiration dla pamięci podręcznej, którą chcesz kontrolować:

import {CacheExpiration} from 'workbox-expiration';

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

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

await openCache.put(request, response);

await expirationManager.updateTimestamp(request.url);

Następnie, gdy chcesz, aby zestaw wpisów wygasł, możesz wywołać metodę expireEntries(), która wymusi konfigurację maxAgeSeconds i maxEntries.

await expirationManager.expireEntries();

Typy

CacheExpiration

Klasa CacheExpiration umożliwia określenie daty wygaśnięcia lub limitu liczby odpowiedzi przechowywanych w Cache.

Właściwości

  • konstruktor

    nieważne

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

    Funkcja constructor ma postać:

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

    • cacheName

      ciąg znaków

      Nazwa pamięci podręcznej, w której mają być stosowane ograniczenia.

    • konfiguracja

      CacheExpirationConfig opcjonalny

  • usuń

    nieważne

    Usuwa obiektowy magazyn danych IndexedDB, który służy do śledzenia metadanych dotyczących wygaśnięcia pamięci podręcznej.

    Funkcja delete ma postać:

    () => {...}

    • returns

      Obietnica<void>

  • expireEntries

    nieważne

    Wygasza wpisy w danej pamięci podręcznej i zgodnie z danymi kryteriami.

    Funkcja expireEntries ma postać:

    () => {...}

    • returns

      Obietnica<void>

  • isURLExpired

    nieważne

    Można go użyć do sprawdzenia, czy adres URL wygasł, zanim go użyto.

    Wymaga to sprawdzenia w pamięci IndexedDB, więc może być czasochłonne.

    Uwaga: ta metoda nie usunie wpisu w pamięci podręcznej. Aby usunąć wpisy w indexedDB i pamięci podręcznej, wywołaj funkcję expireEntries().

    Funkcja isURLExpired ma postać:

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

    • URL

      ciąg znaków

    • returns

      Promise<boolean>

  • updateTimestamp

    nieważne

    Zaktualizuj sygnaturę czasową danego adresu URL. Dzięki temu podczas usuwania wpisów na podstawie maksymalnej liczby wpisów ostatnio używany wpis jest aktualny lub gdy wpisy wygasają, sygnatura czasowa jest aktualna.

    Funkcja updateTimestamp ma postać:

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

    • URL

      ciąg znaków

    • returns

      Obietnica<void>

ExpirationPlugin

Ten wtyczek może być używany w workbox-strategy do regularnego egzekwowania limitu wieku lub liczby żądań zapisanych w pamięci podręcznej.

Można go używać tylko w przypadku instancji workbox-strategy, które mają niestandardowy zestaw właściwości cacheName. Inaczej mówiąc, nie można go używać do wygaszania wpisów w strategii, która używa domyślnej nazwy pamięci podręcznej w czasie wykonywania.

Gdy odpowiedź z pamięci podręcznej zostanie użyta lub zaktualizowana, wtyczka sprawdzi powiązaną pamięć podręczną i usunie wszystkie stare lub dodatkowe odpowiedzi.

Gdy używasz maxAgeSeconds, odpowiedzi mogą być używane raz po wygaśnięciu, ponieważ usuwanie po upływie daty ważności nie nastąpi, dopóki odpowiedź z pamięci podręcznej nie zostanie użyta. Jeśli odpowiedź zawiera nagłówek „Date” (Data), zostanie przeprowadzona lekka weryfikacja ważności i odpowiedź nie zostanie użyta od razu.

Gdy używasz maxEntries, najpierw z pamięci podręcznej zostanie usunięty element, który został ostatnio żądany.

Właściwości

  • konstruktor

    nieważne

    Funkcja constructor ma postać:

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

  • deleteCacheAndMetadata

    nieważne

    To metoda pomocnicza, która wykonuje 2 operacje:

    • Usuwa wszystkie podstawowe instancje pamięci podręcznej powiązane z tym wtyczką, wywołując w Twoim imieniu funkcję caches.delete().
    • Usuwa metadane z IndexedDB, które służą do śledzenia szczegółów wygaśnięcia dla każdej instancji pamięci podręcznej.

    Jeśli używasz wygasania pamięci podręcznej, wywołanie tej metody jest lepsze niż bezpośrednie wywołanie caches.delete(), ponieważ dzięki temu metadanych IndexedDB zostanie prawidłowo usunięta, a otwarte instancje IndexedDB zostaną usunięte.

    Pamiętaj, że jeśli nie używasz wygaśnięcia pamięci podręcznej dla danej pamięci podręcznej, wywołanie funkcji caches.delete() z przekazaniem nazwy pamięci podręcznej powinno wystarczyć. W tym przypadku nie jest potrzebna żadna metoda czyszczenia specyficzna dla Workbox.

    Funkcja deleteCacheAndMetadata ma postać:

    () => {...}

    • returns

      Obietnica<void>

ExpirationPluginOptions

Właściwości

  • matchOptions

    CacheQueryOptions opcjonalnie

  • maxAgeSeconds

    number opcjonalny

  • maxEntries

    number opcjonalny

  • purgeOnQuotaError

    wartość logiczna opcjonalna