Service Worker-Caching und HTTP-Caching

Die Vor- und Nachteile der Verwendung einer einheitlichen oder unterschiedlichen Ablauflogik in den Service Worker-Cache- und HTTP-Cache-Ebenen.

Während Service Worker und PWAs zu Standards moderner Webanwendungen werden, ist das Ressourcen-Caching komplexer geworden als je zuvor. In diesem Artikel werden die wichtigsten Aspekte des Browser-Cachings behandelt, darunter:

  • Anwendungsfälle und Unterschiede zwischen Service Worker-Caching und HTTP-Caching
  • Die Vor- und Nachteile verschiedener Ablaufstrategien für Service Worker-Caching im Vergleich zu regulären HTTP-Caching-Strategien.

Caching-Ablauf – Übersicht

Im Allgemeinen folgt ein Browser der folgenden Caching-Reihenfolge, wenn er eine Ressource anfordert:

  1. Service Worker-Cache: Der Service Worker prüft, ob sich die Ressource in seinem Cache befindet, und entscheidet anhand seiner programmierten Caching-Strategien, ob die Ressource selbst zurückgegeben wird. Hinweis: Das geschieht nicht automatisch. Sie müssen in Ihrem Service Worker einen Fetch-Ereignis-Handler erstellen und Netzwerkanfragen abfangen, damit die Anfragen nicht über das Netzwerk, sondern über den Cache des Service Workers ausgeliefert werden.
  2. HTTP-Cache (auch Browser-Cache genannt): Wenn die Ressource im HTTP-Cache gefunden wird und noch nicht abgelaufen ist, verwendet der Browser automatisch die Ressource aus dem HTTP-Cache.
  3. Serverseitig:Wenn im Service Worker-Cache oder im HTTP-Cache nichts gefunden wird, greift der Browser auf das Netzwerk zu, um die Ressource anzufordern. Wenn die Ressource nicht in einem CDN im Cache gespeichert ist, muss die Anfrage bis zum Ursprungsserver zurückgesendet werden.

Caching-Ablauf

Caching-Ebenen

Service Worker-Caching

Ein Service Worker fängt HTTP-Anfragen vom Netzwerk ab und bestimmt mithilfe einer Caching-Strategie, welche Ressourcen an den Browser zurückgegeben werden sollen. Der Service Worker-Cache und der HTTP-Cache dienen demselben allgemeinen Zweck. Der Service Worker-Cache bietet jedoch mehr Caching-Funktionen, z. B. eine detaillierte Kontrolle darüber, was genau im Cache gespeichert wird und wie das Caching erfolgt.

Service Worker-Cache steuern

Ein Service Worker fängt HTTP-Anfragen mit Ereignis-Listenern ab (normalerweise das Ereignis fetch). Dieses Code-Snippet veranschaulicht die Logik einer Cache-first-Caching-Strategie.

Ein Diagramm, das zeigt, wie Service Worker HTTP-Anfragen abfangen

Wir empfehlen dringend, Workbox zu verwenden, um nicht das Rad neu erfinden zu müssen. So können Sie beispielsweise Ressourcen-URL-Pfade mit einer einzigen Zeile regulären Ausdruckscodes registrieren.

import {registerRoute} from 'workbox-routing';

registerRoute(new RegExp('styles/.*\\.css'), callbackHandler);

Caching-Strategien und Anwendungsfälle für Service Worker

In der folgenden Tabelle werden gängige Caching-Strategien für Service Worker und ihre Anwendungsfälle beschrieben.

Strategien Begründung für die Aktualität Anwendungsbeispiele
Nur Netzwerk Die Inhalte müssen immer auf dem neuesten Stand sein.
  • Zahlungen und Bezahlvorgänge
  • Kontoabrechnungen
Netzwerk fällt auf Cache zurück Es ist besser, die aktuellen Inhalte zu präsentieren. Wenn das Netzwerk jedoch ausfällt oder instabil ist, ist es akzeptabel, etwas ältere Inhalte zu präsentieren.
  • Aktuelle Daten
  • Preise und Preise (Haftungsausschlüsse erforderlich)
  • Bestellstatus
Stale-while-revalidate Sie können zwischengespeicherte Inhalte sofort bereitstellen, aber in Zukunft sollten aktualisierte zwischengespeicherte Inhalte verwendet werden.
  • Nachrichtenfeeds
  • Seiten mit Produkteinträgen
  • Nachrichten
Zuerst im Cache speichern, dann auf das Netzwerk zurückgreifen Die Inhalte sind nicht kritisch und können aus dem Cache bereitgestellt werden, um die Leistung zu steigern. Der Dienst-Worker sollte jedoch gelegentlich nach Updates suchen.
  • App-Shells
  • Gemeinsam genutzte Ressourcen
Nur Cache Die Inhalte ändern sich selten.
  • Statischer Inhalt

Weitere Vorteile des Service Worker-Cachings

Neben der detaillierten Steuerung der Caching-Logik bietet das Caching von Dienst-Workern auch folgende Vorteile:

  • Mehr Arbeitsspeicher und Speicherplatz für den Ursprung:Der Browser weist HTTP-Cache-Ressourcen pro Ursprung zu. Wenn Sie also mehrere Subdomains haben, teilen sich diese denselben HTTP-Cache. Es gibt keine Garantie dafür, dass die Inhalte Ihrer Quelle/Domain lange im HTTP-Cache bleiben. Ein Nutzer kann den Cache beispielsweise manuell über die Einstellungen eines Browsers leeren oder eine vollständige Neulade-Aktion auf einer Seite auslösen. Mit einem Service Worker-Cache ist die Wahrscheinlichkeit viel höher, dass Ihre im Cache gespeicherten Inhalte dort verbleiben. Weitere Informationen finden Sie unter Persistenter Speicher.
  • Höhere Flexibilität bei fehlerhaften Netzwerken oder Offlinenutzung: Beim HTTP-Cache haben Sie nur die Wahl zwischen „Ja“ und „Nein“. Mit dem Service Worker-Caching können Sie kleine „Hänger“ viel einfacher beheben (mit der Strategie „Stale-While-Revalidate“), eine vollständige Offlinenutzung ermöglichen (mit der Strategie „Nur Cache“) oder sogar etwas dazwischen, z. B. benutzerdefinierte Benutzeroberflächen, bei denen Teile der Seite aus dem Service Worker-Cache stammen und andere Teile gegebenenfalls ausgeschlossen werden (mit der Strategie „Set catch handler“).

HTTP-Caching

Wenn ein Browser eine Webseite und zugehörige Ressourcen zum ersten Mal lädt, speichert er diese Ressourcen in seinem HTTP-Cache. Der HTTP-Cache wird in der Regel automatisch von Browsern aktiviert, es sei denn, er wurde vom Endnutzer ausdrücklich deaktiviert.

Bei der Verwendung des HTTP-Cachings wird der Server angewiesen, zu bestimmen, wann und wie lange eine Ressource im Cache gespeichert werden soll.

Ablauf des HTTP-Caches mit HTTP-Antwortheadern steuern

Wenn ein Server auf eine Browseranfrage nach einer Ressource antwortet, gibt er mithilfe von HTTP-Antwortheadern an, wie lange die Ressource im Cache gespeichert werden soll. Weitere Informationen finden Sie unter Antwortheader: Webserver konfigurieren.

HTTP-Caching-Strategien und Anwendungsfälle

Das HTTP-Caching ist viel einfacher als das Service Worker-Caching, da beim HTTP-Caching nur die zeitbasierte (TTL) Logik für das Ablaufen von Ressourcen verwendet wird. Weitere Informationen zu HTTP-Caching-Strategien finden Sie unter Welche Antwortheader-Werte sollten Sie verwenden? und Zusammenfassung.

Logik für den Cache-Ablauf entwerfen

In diesem Abschnitt werden die Vor- und Nachteile einer einheitlichen Ablauflogik für den Service Worker-Cache und die HTTP-Cache-Ebene sowie die Vor- und Nachteile einer separaten Ablauflogik für diese Ebenen erläutert.

Im folgenden Glitch wird veranschaulicht, wie das Caching von Service Workern und das HTTP-Caching in verschiedenen Szenarien funktionieren:

Einheitliche Ablauflogik für alle Cacheebenen

Um die Vor- und Nachteile zu veranschaulichen, sehen wir uns drei Szenarien an: langfristig, mittelfristig und kurzfristig.

Szenarien Langfristiges Caching Mittelfristiges Caching Kurzfristiges Caching
Service Worker-Caching-Strategie Cache, Netzwerk als Rückfall Stale-while-revalidate Netzwerk greift auf Cache zurück
TTL für Service Worker-Cache 30 Tage 1 Tag 10 Min.
HTTP-Cache-Max-Age 30 Tage 1 Tag 10 Min.

Szenario: Langzeit-Caching (Cache, Rückfall auf Netzwerk)

  • Wenn eine im Cache gespeicherte Ressource gültig ist (< 30 Tage): Der Service Worker gibt die im Cache gespeicherte Ressource sofort zurück, ohne das Netzwerk aufzurufen.
  • Wenn eine im Cache gespeicherte Ressource abgelaufen ist (mehr als 30 Tage): Der Service Worker ruft die Ressource über das Netzwerk ab. Der Browser hat keine Kopie der Ressource in seinem HTTP-Cache. Daher wird die Ressource serverseitig abgerufen.

Nachteil: In diesem Szenario bietet das HTTP-Caching weniger Vorteile, da der Browser die Anfrage immer an die Serverseite weiterleitet, wenn der Cache im Service Worker abläuft.

Szenario: Mittelfristiges Caching (Stale-while-revalidate)

  • Wenn eine im Cache gespeicherte Ressource gültig ist (jünger als 1 Tag): Der Service Worker gibt die im Cache gespeicherte Ressource sofort zurück und ruft die Ressource aus dem Netzwerk ab. Der Browser hat eine Kopie der Ressource in seinem HTTP-Cache und gibt diese Kopie an den Service Worker zurück.
  • Wenn eine im Cache gespeicherte Ressource abgelaufen ist (länger als 1 Tag): Der Service Worker gibt die im Cache gespeicherte Ressource sofort zurück und ruft die Ressource aus dem Netzwerk ab. Der Browser hat keine Kopie der Ressource in seinem HTTP-Cache. Daher wird die Ressource serverseitig abgerufen.

Nachteil: Der Dienst-Worker erfordert zusätzliche Cache-Busting-Vorgänge, um den HTTP-Cache zu überschreiben und den Schritt „Neu bestätigen“ optimal zu nutzen.

Szenario: Kurzfristiges Caching (Netzwerk fällt auf Cache zurück)

  • Wenn eine im Cache gespeicherte Ressource gültig ist (< 10 Minuten): Der Service Worker ruft die Ressource über das Netzwerk ab. Der Browser hat eine Kopie der Ressource in seinem HTTP-Cache und gibt sie an den Service Worker zurück, ohne serverseitig zu gehen.
  • Wenn eine im Cache gespeicherte Ressource abgelaufen ist (mehr als 10 Minuten): Der Service Worker gibt die im Cache gespeicherte Ressource sofort zurück und ruft die Ressource aus dem Netzwerk ab. Der Browser hat keine Kopie der Ressource in seinem HTTP-Cache. Daher wird die Ressource serverseitig abgerufen.

Nachteil: Ähnlich wie beim mittelfristigen Caching-Szenario erfordert der Dienst-Worker zusätzliche Cache-Busting-Logik, um den HTTP-Cache zu überschreiben und die neueste Ressource von der Serverseite abzurufen.

Dienst-Worker in allen Szenarien

In allen Fällen kann der Service Worker-Cache auch dann zwischengespeicherte Ressourcen zurückgeben, wenn das Netzwerk instabil ist. Andererseits ist der HTTP-Cache nicht zuverlässig, wenn das Netzwerk instabil ist oder ausgefallen ist.

Unterschiedliche Cache-Ablauflogik in der Service Worker-Cache- und HTTP-Ebene

Um die Vor- und Nachteile zu veranschaulichen, sehen wir uns noch einmal langfristige, mittelfristige und kurzfristige Szenarien an.

Szenarien Langfristiges Caching Mittelfristiges Caching Kurzfristiges Caching
Service Worker-Caching-Strategie Cache, Netzwerk als Rückfall Stale-while-revalidate Netzwerk greift auf Cache zurück
TTL für Service Worker-Cache 90 Tage 30 Tage 1 Tag
HTTP-Cache-Max-Age 30 Tage 1 Tag 10 Min.

Szenario: Langzeit-Caching (Cache, Rückfall auf Netzwerk)

  • Wenn eine im Service Worker-Cache gespeicherte Ressource gültig ist (jünger als 90 Tage): Der Service Worker gibt die im Cache gespeicherte Ressource sofort zurück.
  • Wenn eine im Service Worker-Cache gespeicherte Ressource abgelaufen ist (länger als 90 Tage): Der Service Worker ruft die Ressource über das Netzwerk ab. Der Browser hat keine Kopie der Ressource in seinem HTTP-Cache, daher wird sie serverseitig abgerufen.

Vor- und Nachteile:

  • Vorteil: Nutzer erhalten eine sofortige Antwort, da der Service Worker zwischengespeicherte Ressourcen sofort zurückgibt.
  • Vorteil: Der Service Worker kann genauer steuern, wann sein Cache verwendet und wann neue Versionen von Ressourcen angefordert werden sollen.
  • Nachteil: Eine gut definierte Caching-Strategie für Service Worker ist erforderlich.

Szenario: Mittelfristiges Caching (Stale-while-revalidate)

  • Wenn eine im Cache des Service Workers gespeicherte Ressource gültig ist (jünger als 30 Tage): Der Service Worker gibt die im Cache gespeicherte Ressource sofort zurück.
  • Wenn eine im Service Worker-Cache gespeicherte Ressource abgelaufen ist (länger als 30 Tage): Der Service Worker ruft die Ressource aus dem Netzwerk ab. Der Browser hat keine Kopie der Ressource in seinem HTTP-Cache, daher wird sie serverseitig abgerufen.

Vor- und Nachteile:

  • Vorteil: Nutzer erhalten eine sofortige Antwort, da der Service Worker zwischengespeicherte Ressourcen sofort zurückgibt.
  • Vorteil: Der Dienst-Worker kann dafür sorgen, dass für die nächste Anfrage für eine bestimmte URL eine neue Antwort vom Netzwerk verwendet wird, da die erneute Validierung „im Hintergrund“ erfolgt.
  • Nachteil: Eine gut definierte Caching-Strategie für Service Worker ist erforderlich.

Szenario: Kurzfristiges Caching (Netzwerk fällt auf Cache zurück)

  • Wenn eine im Cache des Dienstarbeiters gespeicherte Ressource gültig ist (jünger als 1 Tag): Der Dienstarbeiter ruft die Ressource über das Netzwerk ab. Der Browser gibt die Ressource aus dem HTTP-Cache zurück, falls sie dort vorhanden ist. Wenn das Netzwerk ausgefallen ist, gibt der Service Worker die Ressource aus dem Service Worker-Cache zurück.
  • Wenn eine im Service Worker-Cache gespeicherte Ressource abgelaufen ist (länger als 1 Tag): Der Service Worker ruft die Ressource aus dem Netzwerk ab. Der Browser ruft die Ressourcen über das Netzwerk ab, da die im HTTP-Cache gespeicherte Version abgelaufen ist.

Vor- und Nachteile:

  • Vorteil: Wenn das Netzwerk instabil ist oder ausfällt, gibt der Service Worker sofort zwischengespeicherte Ressourcen zurück.
  • Nachteil: Der Dienst-Worker benötigt zusätzliche Cache-Busting-Vorgänge, um den HTTP-Cache zu überschreiben und „Netzwerk zuerst“-Anfragen zu stellen.

Fazit

Aufgrund der Komplexität der Kombination von Caching-Szenarien ist es nicht möglich, eine einzige Regel zu entwerfen, die alle Fälle abdeckt. Auf der Grundlage der Ergebnisse in den vorherigen Abschnitten gibt es jedoch einige Vorschläge, die Sie beim Entwerfen Ihrer Cache-Strategien berücksichtigen sollten:

  • Die Cache-Logik von Service Workern muss nicht mit der Ablauflogik des HTTP-Cachings übereinstimmen. Verwenden Sie nach Möglichkeit eine längere Ablauflogik im Dienstworker, um ihm mehr Kontrolle zu gewähren.
  • Das HTTP-Caching spielt immer noch eine wichtige Rolle, ist aber nicht zuverlässig, wenn das Netzwerk instabil ist oder ausfällt.
  • Überprüfen Sie Ihre Caching-Strategien für jede Ressource, um sicherzustellen, dass die Caching-Strategie des Service Workers einen Mehrwert bietet, ohne mit dem HTTP-Cache in Konflikt zu stehen.

Weitere Informationen