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