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
-
returns
-
-
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) => {...}
-
konfiguracja
Opcjonalny ExpirationPluginOptions.
-
returns
-
-
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