scadenza della cartella di lavoro

È abbastanza comune applicare limitazioni a una cache in termini di quanto a lungo dovrebbe consentire l'archiviazione degli elementi in una cache o di quanti elementi devono essere conservati in una cache. Workbox fornisce questa funzionalità tramite il plug-in workbox-expiration che consente di limitare il numero di voci in una cache e / o rimuovere le voci che sono state memorizzate nella cache per un lungo periodo di tempo.

Limita il numero di voci nella cache

Per limitare il numero di voci archiviate in una cache, puoi utilizzare l'opzione maxEntries in questo modo:

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,
      }),
    ],
  })
);

In questo modo, il plugin verrà aggiunto a questa route. Dopo aver utilizzato una risposta memorizzata nella cache o aver aggiunto una nuova richiesta alla cache, il plug-in controlla la cache configurata e si assicura che il numero di voci memorizzate nella cache non superi il limite. In caso affermativo, le voci meno recenti verranno rimosse.

Limita l'età delle voci memorizzate nella cache

Per limitare il periodo di tempo durante il quale una richiesta viene memorizzata nella cache, puoi definire un'età massima in secondi utilizzando l'opzione maxAgeSeconds, in questo modo:

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,
      }),
    ],
  })
);

Il plug-in controlla e rimuove le voci dopo ogni richiesta o aggiornamento della cache.

Utilizzo avanzato

Se vuoi utilizzare una logica di scadenza separata da qualsiasi altro modulo di Workbox, puoi farlo con la classe CacheExpiration.

Per applicare limitazioni a una cache, devi creare un'istanza di CacheExpiration per la cache che vuoi controllare in questo modo:

import {CacheExpiration} from 'workbox-expiration';

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

Ogni volta che aggiorni una voce memorizzata nella cache, devi chiamare il metodo updateTimestamp() in modo che la relativa età venga aggiornata.

await openCache.put(request, response);

await expirationManager.updateTimestamp(request.url);

Ogni volta che vuoi far scadere un insieme di voci, puoi chiamare il metodo expireEntries(), che forzerà l'applicazione della configurazione di maxAgeSeconds e maxEntries.

await expirationManager.expireEntries();

Tipi

CacheExpiration

La classe CacheExpiration consente di definire una scadenza e / o un limite per il numero di risposte archiviate in un Cache.

Proprietà

  • costruttore

    void

    Per creare una nuova istanza CacheExpiration devi fornire almeno una delle proprietà config.

    La funzione constructor ha il seguente aspetto:

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

    • cacheName

      stringa

      Nome della cache a cui applicare le limitazioni.

    • config

      CacheExpirationConfig facoltativo

  • elimina

    void

    Rimuove l'archivio di oggetti IndexedDB utilizzato per tenere traccia dei metadati di scadenza della cache.

    La funzione delete ha il seguente aspetto:

    () => {...}

    • returns

      Promise<void>

  • expireEntries

    void

    Scade le voci per la cache e i criteri specificati.

    La funzione expireEntries ha il seguente aspetto:

    () => {...}

    • returns

      Promise<void>

  • isURLExpired

    void

    Può essere utilizzato per verificare se un URL è scaduto o meno prima di essere utilizzato.

    Ciò richiede una ricerca da IndexedDB, quindi può essere lento.

    Nota: questo metodo non rimuoverà la voce memorizzata nella cache. Chiamata expireEntries() per rimuovere le voci indicizzate e cache.

    La funzione isURLExpired ha il seguente aspetto:

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

    • url

      stringa

    • returns

      Promise<boolean>

  • updateTimestamp

    void

    Aggiorna il timestamp per l'URL specificato. In questo modo, quando rimuovi le voci in base al numero massimo di voci, utilizzato più di recente è preciso o, alla scadenza, il timestamp è aggiornato.

    La funzione updateTimestamp ha il seguente aspetto:

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

    • url

      stringa

    • returns

      Promise<void>

ExpirationPlugin

Questo plug-in può essere utilizzato in un workbox-strategy per applicare regolarmente un limite relativo all'età e / o al numero di richieste memorizzate nella cache.

Può essere utilizzato solo con le istanze workbox-strategy che hanno un set di proprietà cacheName personalizzato. In altre parole, non può essere utilizzato per far scadere le voci nella strategia che utilizza il nome predefinito della cache di runtime.

Ogni volta che una risposta memorizzata nella cache viene utilizzata o aggiornata, questo plug-in esamina la cache associata e rimuove le risposte vecchie o aggiuntive.

Quando utilizzi maxAgeSeconds, le risposte possono essere utilizzate una volta dopo la scadenza perché la pulizia della scadenza verrà eseguita solo dopo l'utilizzo della risposta memorizzata nella cache. Se la risposta ha un'intestazione "Data", viene eseguito un controllo di scadenza ridotto e la risposta non verrà utilizzata immediatamente.

Quando utilizzi maxEntries, la voce richiesta meno di recente viene prima rimossa dalla cache.

Proprietà

  • costruttore

    void

    La funzione constructor ha il seguente aspetto:

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

  • deleteCacheAndMetadata

    void

    Si tratta di un metodo helper che esegue due operazioni:

    • Elimina tutte le istanze di cache sottostanti associate a questa istanza plug-in chiamando caches.delete() per tuo conto.
    • Elimina i metadati da IndexedDB utilizzati per tenere traccia dei dettagli della scadenza per ogni istanza Cache.

    Quando utilizzi la scadenza della cache, è preferibile chiamare questo metodo piuttosto che chiamare direttamente caches.delete(), poiché in questo modo si garantisce che anche i metadati IndexedDB vengano rimossi in modo pulito e le istanze IndexedDB aperte vengono eliminate.

    Tieni presente che se non utilizzi la scadenza per una determinata cache, dovrebbero essere sufficienti chiamate a caches.delete() e trasmissione del nome della cache. In questo caso, non è necessario un metodo specifico di Workbox per la pulizia.

    La funzione deleteCacheAndMetadata ha il seguente aspetto:

    () => {...}

    • returns

      Promise<void>

ExpirationPluginOptions

Proprietà

  • matchOptions

    CacheQueryOptions facoltativo

  • maxAgeSeconds

    numero facoltativo

  • maxEntries

    numero facoltativo

  • purgeOnQuotaError

    booleano facoltativo