scadenza della cartella di lavoro

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

Limita il numero di voci della cache

Per limitare il numero di voci memorizzate in una cache, puoi utilizzare l'opzione maxEntries nel seguente 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 plug-in verrà aggiunto a questo percorso. Dopo che viene utilizzata una risposta memorizzata nella cache o viene aggiunta una nuova richiesta alla cache, il plug-in esaminerà la cache configurata e si assicurerà che il numero di voci memorizzate nella cache non superi il limite. In questo caso, le voci meno recenti verranno rimosse.

Limitare la data delle voci memorizzate nella cache

Per limitare il tempo di memorizzazione nella cache di una richiesta, puoi definire un'età massima in secondi utilizzando l'opzione maxAgeSeconds nel seguente 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 controllerà e rimuoverà le voci dopo ogni richiesta o aggiornamento della cache.

Utilizzo avanzato

Se vuoi utilizzare la logica di scadenza separatamente da qualsiasi altro modulo 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 nel seguente 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);

Poi, ogni volta che vuoi che un insieme di voci scada, puoi chiamare il metodo expireEntries() che applicherà la configurazione maxAgeSeconds e maxEntries.

await expirationManager.expireEntries();

Tipi

CacheExpiration

La classe CacheExpiration consente di definire una scadenza e / o un limite al numero di risposte memorizzate in un Cache.

Proprietà

  • Costruttore

    nullo

    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

    nullo

    Rimuove l'object store IndexedDB utilizzato per tenere traccia dei metadati relativi alla scadenza della cache.

    La funzione delete ha il seguente aspetto:

    () => {...}

    • returns

      Promise<void>

  • expireEntries

    nullo

    Scade le voci per la cache e i criteri specificati.

    La funzione expireEntries ha il seguente aspetto:

    () => {...}

    • returns

      Promise<void>

  • isURLExpired

    nullo

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

    Questa operazione richiede una ricerca da IndexedDB, pertanto può essere lenta.

    Nota: questo metodo non rimuove la voce memorizzata nella cache. Chiama expireEntries() per rimuovere le voci di indexedDB e della cache.

    La funzione isURLExpired ha il seguente aspetto:

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

    • url

      stringa

    • returns

      Promise<boolean>

  • updateTimestamp

    nullo

    Aggiorna il timestamp per l'URL specificato. In questo modo, la rimozione delle voci in base al numero massimo di voci, la più utilizzata è accurata o la 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 all'età e / o al numero di richieste memorizzate nella cache.

Può essere utilizzato solo con 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 della cache di runtime predefinito.

Ogni volta che viene utilizzata o aggiornata una risposta memorizzata nella cache, questo plug-in controlla 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 non avverrà dopo l'utilizzo della risposta memorizzata nella cache. Se la risposta contiene un'intestazione "Data", viene eseguito un controllo di scadenza leggero e la risposta non verrà utilizzata immediatamente.

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

Proprietà

  • Costruttore

    nullo

    La funzione constructor ha il seguente aspetto:

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

  • deleteCacheAndMetadata

    nullo

    Questo è un metodo di supporto che esegue due operazioni:

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

    Quando utilizzi la scadenza della cache, è preferibile chiamare questo metodo anziché chiamare direttamente caches.delete(), poiché in questo modo verrà garantita anche la rimozione corretta dei metadati IndexedDB e l'eliminazione delle istanze IndexedDB aperte.

    Tieni presente che se non utilizzi la scadenza della cache per una determinata cache, chiamarecaches.delete() e passare il nome della cache dovrebbe essere sufficiente. In questo caso, non è necessario alcun metodo specifico di Workbox per la pulizia.

    La funzione deleteCacheAndMetadata ha il seguente aspetto:

    () => {...}

    • returns

      Promise<void>

ExpirationPluginOptions

Proprietà

  • matchOptions

    CacheQueryOptions facoltativo

  • maxAgeSeconds

    number facoltativo

  • maxEntries

    number facoltativo

  • purgeOnQuotaError

    booleano facoltativo