Beim Caching von Assets zur Laufzeit gibt es keine allgemeingültige Regel, ob eine bestimmte Antwort „gültig“ ist und gespeichert und wiederverwendet werden kann.
Das workbox-cacheable-response
-Modul bietet eine Standardmethode, um anhand des numerischen Statuscodes, des Vorhandenseins eines Headers mit einem bestimmten Wert oder einer Kombination aus beiden zu bestimmen, ob eine Antwort im Cache gespeichert werden soll.
Caching basierend auf Statuscodes
Sie können eine Workbox-Strategie konfigurieren, die in Betracht gezogen werden soll.
eine Reihe von Statuscodes, die für das Caching geeignet sind, indem ein
CacheableResponsePlugin
-Instanz zum Parameter plugins
einer Strategie:
import {registerRoute} from 'workbox-routing';
import {CacheFirst} from 'workbox-strategies';
import {CacheableResponsePlugin} from 'workbox-cacheable-response';
registerRoute(
({url}) =>
url.origin === 'https://third-party.example.com' &&
url.pathname.startsWith('/images/'),
new CacheFirst({
cacheName: 'image-cache',
plugins: [
new CacheableResponsePlugin({
statuses: [0, 200],
}),
],
})
);
Mit dieser Konfiguration wird Workbox mitgeteilt, dass bei der Verarbeitung von Antworten für Anfragen an https://third-party.example.com/images/
alle Anfragen mit dem Statuscode 0
oder 200
im Cache gespeichert werden sollen.
Caching basierend auf Headern
Sie können eine Workbox-Strategie konfigurieren, um zu prüfen, ob bestimmte Headerwerte als Kriterien für die Aufnahme in den Cache vorhanden sind. Legen Sie dazu beim Erstellen des Plug-ins das headers
-Objekt fest:
import {registerRoute} from 'workbox-routing';
import {StaleWhileRevalidate} from 'workbox-strategies';
import {CacheableResponsePlugin} from 'workbox-cacheable-response';
registerRoute(
({url}) => url.pathname.startsWith('/path/to/api/'),
new StaleWhileRevalidate({
cacheName: 'api-cache',
plugins: [
new CacheableResponsePlugin({
headers: {
'X-Is-Cacheable': 'true',
},
}),
],
})
);
Wenn du Antworten für Anfrage-URLs mit /path/to/api/
bearbeitest, sieh dir den Header X-Is-Cacheable
an, der der Antwort vom Server hinzugefügt wird. Ob dieser Header vorhanden ist und ob er
auf den Wert „true“ gesetzt ist, kann die Antwort im Cache gespeichert werden.
Wenn mehrere Header angegeben sind, muss nur einer der Header mit den zugehörigen Werten übereinstimmen.
Caching basierend auf Headern und Statuscodes
Sie können sowohl die Status- als auch die Headerkonfiguration mischen. Beide Bedingungen muss erfüllt sein, damit eine Antwort als Cache-fähig betrachtet wird. mit anderen Worten: Die Antwort muss einen der konfigurierten Statuscodes enthalten und mindestens einen der angegebenen Header haben.
import {registerRoute} from 'workbox-routing';
import {StaleWhileRevalidate} from 'workbox-strategies';
import {CacheableResponsePlugin} from 'workbox-cacheable-response';
registerRoute(
({url}) => url.pathname.startsWith('/path/to/api/'),
new StaleWhileRevalidate({
cacheName: 'api-cache',
plugins: [
new CacheableResponsePlugin({
statuses: [200, 404],
headers: {
'X-Is-Cacheable': 'true',
},
}),
],
})
);
Welche Standardeinstellungen gibt es?
Wenn Sie eine der integrierten Strategien von Workbox verwenden, ohne eine cacheableResponse.CacheableResponsePlugin
explizit zu konfigurieren, werden die folgenden Standardkriterien verwendet, um zu bestimmen, ob eine vom Netzwerk empfangene Antwort im Cache gespeichert werden soll:
- staleWhileRevalidate und networkFirst: Antworten mit dem Status
0
(d. h. nicht transparente Antworten) oder200
gelten als im Cache speicherbar. - cacheFirst: Antworten mit dem Status
200
gelten als cachefähig.
Standardmäßig werden Antwortheader nicht verwendet, um die Cache-Fähigkeit zu bestimmen.
Warum gibt es unterschiedliche Standardeinstellungen?
Die Standardeinstellungen variieren je nachdem, ob Antworten mit dem Status 0
(d. h. nicht transparente Antworten) im Cache gespeichert werden. Aufgrund der „Blackbox“ Art der undurchsichtigen Antworten,
kann der Service Worker nicht erkennen,
gültig ist oder ob sie eine Fehlerantwort darstellt, die vom
ursprungsübergreifend sein.
Bei Strategien, die Möglichkeiten zur Aktualisierung der im Cache gespeicherten Antwort enthalten, wie staleWährendRevalid und networkFirst, besteht das Risiko, dass ein Caching einer vorübergehende Fehlerantwort wird abgemildert, indem das nächste Mal wenn der Cache aktualisiert wurde, wird eine ordnungsgemäße, erfolgreiche Antwort verwendet.
Bei Strategien, bei denen die erste erhaltene Antwort im Cache gespeichert wird,
unbestimmte Zeit wiederverwendet,
vorübergehende Fehler im Cache und
Wiederverwendung sind schwerwiegender. Zur Sicherheit wird bei cacheFirst standardmäßig keine Antwort gespeichert, es sei denn, sie hat den Statuscode 200
.
Erweiterte Nutzung
Wenn Sie die gleiche Caching-Logik außerhalb einer Workbox-Strategie verwenden möchten,
kann die CacheableResponse
-Klasse direkt verwenden.
import {CacheableResponse} from 'workbox-cacheable-response';
const cacheable = new CacheableResponse({
statuses: [0, 200],
headers: {
'X-Is-Cacheable': 'true',
},
});
const response = await fetch('/path/to/api');
if (cacheable.isResponseCacheable(response)) {
const cache = await caches.open('api-cache');
cache.put(response.url, response);
} else {
// Do something when the response can't be cached.
}
Typen
CacheableResponse
Mit dieser Klasse können Sie Regeln festlegen, welche Statuscodes und/oder Header vorhanden sein müssen, damit eine Response
als im Cache speicherbar betrachtet wird.
Attribute
-
Konstruktor
void
Um eine neue Instanz von „CacheableResponse“ zu erstellen, müssen Sie mindestens eine der
config
-Properties angeben.Wenn sowohl
statuses
als auchheaders
angegeben sind, müssen beide Bedingungen erfüllt sein, damit dasResponse
als Cache-fähig gilt.Die
constructor
-Funktion sieht so aus:(config?: CacheableResponseOptions) => {...}
-
config
CacheableResponseOptions optional
-
Gibt zurück
-
-
isResponseCacheable
voidm
Prüft anhand der Konfiguration dieses Objekts, ob eine Antwort im Cache gespeichert werden kann oder nicht.
Die Funktion
isResponseCacheable
sieht so aus:(response: Response) => {...}
-
Antwort
Antwort
Die Antwort, deren Cache-Fähigkeit aktiviert.
-
Gibt zurück
boolean
true
, wennResponse
im Cache gespeichert werden kann, undfalse
sonst.
-
CacheableResponseOptions
Attribute
-
headers
Objekt optional
-
statuses
number[] optional
CacheableResponsePlugin
Eine Klasse, die den cacheWillUpdate
-Lebenszyklusereignis-Callback implementiert. So können Sie
einfachere Überprüfung der Cache-Fähigkeit bei Anfragen über die integrierte Workbox-
zu entwickeln.
Attribute
-
Konstruktor
void
Um eine neue Instanz von „CacheableResponsePlugin“ zu erstellen, müssen Sie mindestens eine der
config
-Properties angeben.Wenn sowohl
statuses
als auchheaders
angegeben sind, müssen beide Bedingungen erfüllt sein, damit dasResponse
als Cache-fähig gilt.Die
constructor
-Funktion sieht so aus:(config: CacheableResponseOptions) => {...}
-
config
-
Gibt zurück
-