werkdoos-vervaldatum

Het is vrij gebruikelijk om beperkingen op te leggen aan een cache in termen van hoe lang items in een cache mogen worden opgeslagen of hoeveel items in een cache moeten worden bewaard. Workbox biedt deze functionaliteit via de workbox-expiration -plug-in waarmee u het aantal vermeldingen in een cache kunt beperken en/of vermeldingen kunt verwijderen die gedurende een lange periode in de cache zijn opgeslagen.

Beperk het aantal cache-items

Om het aantal items dat in een cache is opgeslagen te beperken, kunt u de optie maxEntries als volgt gebruiken:

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

Hiermee wordt de Plugin aan deze route toegevoegd. Nadat een in de cache opgeslagen antwoord is gebruikt of een nieuw verzoek aan de cache is toegevoegd, kijkt de plug-in naar de geconfigureerde cache en zorgt ervoor dat het aantal in de cache opgeslagen vermeldingen de limiet niet overschrijdt. Als dit het geval is, worden de oudste vermeldingen verwijderd .

Beperk de leeftijd van in het cachegeheugen opgeslagen vermeldingen

Om te beperken hoe lang een verzoek in de cache wordt bewaard, kunt u een maximale leeftijd in seconden definiëren met behulp van de optie maxAgeSeconds , als volgt:

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

De plug-in controleert en verwijdert vermeldingen na elke aanvraag of cache-update.

Geavanceerd gebruik

Als u de vervallogica afzonderlijk van andere Workbox-modules wilt gebruiken, kunt u dit doen met de klasse CacheExpiration .

Om beperkingen op een cache toe te passen, maakt u als volgt een exemplaar van CacheExpiration voor de cache die u wilt beheren:

import {CacheExpiration} from 'workbox-expiration';

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

Telkens wanneer u een item in de cache bijwerkt, moet u de methode updateTimestamp() aanroepen, zodat de leeftijd ervan wordt bijgewerkt.

await openCache.put(request, response);

await expirationManager.updateTimestamp(request.url);

Wanneer u vervolgens een reeks vermeldingen wilt laten verlopen, kunt u de expireEntries() aanroepen die de configuratie maxAgeSeconds en maxEntries afdwingt.

await expirationManager.expireEntries();

Soorten

CacheExpiration

Met de klasse CacheExpiration kunt u een vervaldatum en/of limiet definiëren voor het aantal reacties dat in een Cache is opgeslagen.

Eigenschappen

  • bouwer

    leegte

    Om een ​​nieuwe CacheExpiration-instantie te construeren, moet u ten minste één van de config eigenschappen opgeven.

    De constructor ziet er als volgt uit:

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

    • cacheNaam

      snaar

      Naam van de cache waarop beperkingen moeten worden toegepast.

    • configuratie

      CacheExpirationConfig optioneel

  • verwijderen

    leegte

    Verwijdert de IndexedDB-objectopslag die wordt gebruikt om metagegevens over het verlopen van de cache bij te houden.

    De delete ziet er als volgt uit:

    () => {...}

    • retourneert

      Beloof <nietig>

  • verlopenInzendingen

    leegte

    Verloopt vermeldingen voor de opgegeven cache en opgegeven criteria.

    De expireEntries -functie ziet er als volgt uit:

    () => {...}

    • retourneert

      Beloof <nietig>

  • isURLEverlopen

    leegte

    Kan worden gebruikt om te controleren of een URL is verlopen of niet voordat deze wordt gebruikt.

    Dit vereist een zoekopdracht vanuit IndexedDB, en kan dus traag zijn.

    Opmerking: deze methode verwijdert de in de cache opgeslagen vermelding niet. expireEntries() aan om geïndexeerdeDB- en cache-vermeldingen te verwijderen.

    De isURLExpired functie ziet er als volgt uit:

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

    • URL

      snaar

    • retourneert

      Beloof<boolean>

  • updateTijdstempel

    leegte

    Update de tijdstempel voor de opgegeven URL. Dit zorgt ervoor dat bij het verwijderen van vermeldingen op basis van het maximale aantal vermeldingen, de meest recent gebruikte gegevens nauwkeurig zijn of dat bij het verlopen de tijdstempel actueel is.

    De updateTimestamp functie ziet er als volgt uit:

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

    • URL

      snaar

    • retourneert

      Beloof <nietig>

ExpirationPlugin

Deze plug-in kan worden gebruikt in een workbox-strategy om regelmatig een limiet op te leggen aan de leeftijd en/of het aantal in de cache opgeslagen verzoeken.

Het kan alleen worden gebruikt met workbox-strategy instanties waarvoor een aangepaste eigenschap cacheName is ingesteld . Met andere woorden: het kan niet worden gebruikt om vermeldingen te laten verlopen in een strategie die gebruikmaakt van de standaard runtime-cachenaam.

Telkens wanneer een in de cache opgeslagen antwoord wordt gebruikt of bijgewerkt, zal deze plug-in naar de bijbehorende cache kijken en eventuele oude of extra antwoorden verwijderen.

Wanneer u maxAgeSeconds gebruikt, kunnen reacties na het verlopen één keer worden gebruikt, omdat het opruimen van de vervaldatum pas zal hebben plaatsgevonden nadat het in de cache opgeslagen antwoord is gebruikt. Als het antwoord een header 'Datum' heeft, wordt er een lichte vervalcontrole uitgevoerd en wordt het antwoord niet onmiddellijk gebruikt.

Wanneer u maxEntries gebruikt, wordt de minst recent aangevraagde vermelding als eerste uit de cache verwijderd.

Eigenschappen

  • bouwer

    leegte

    De constructor ziet er als volgt uit:

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

  • deleteCacheAndMetadata

    leegte

    Dit is een hulpmethode die twee bewerkingen uitvoert:

    • Verwijdert alle onderliggende Cache-instanties die aan deze plug-in-instantie zijn gekoppeld, door namens u caches.delete() aan te roepen.
    • Verwijdert de metagegevens uit IndexedDB die worden gebruikt om vervalgegevens voor elke cache-instantie bij te houden.

    Bij het gebruik van cache-vervaldatum verdient het aanroepen van deze methode de voorkeur boven het direct aanroepen van caches.delete() omdat dit ervoor zorgt dat de IndexedDB-metagegevens ook netjes worden verwijderd en open IndexedDB-instanties worden verwijderd.

    Houd er rekening mee dat als u geen gebruik maakt van het verlopen van de cache voor een bepaalde cache, het aanroepen van caches.delete() en het doorgeven van de naam van de cache voldoende zou moeten zijn. In dat geval is er geen Workbox-specifieke methode nodig voor het opschonen.

    De functie deleteCacheAndMetadata ziet er als volgt uit:

    () => {...}

    • retourneert

      Beloof <nietig>

ExpirationPluginOptions

Eigenschappen

  • matchOptions

    CacheQueryOptions optioneel

  • maxAgeSeconden

    nummer optioneel

  • maxInvoer

    nummer optioneel

  • purgeOnQuotaError

    Booleaans optioneel