Hinweis: Ab Firefox 57 und Chrome 68 sowie den Versionen von Safari und Edge, die Service Worker unterstützen, wurde das Standardverhalten geändert, um die aktualisierte Service Worker-Spezifikation zu berücksichtigen . In diesen Browsern werden HTTP-Cache-Anweisungen standardmäßig ignoriert, wenn das Service Worker-Skript auf Aktualisierungen überprüft wird. Die folgende Beschreibung gilt weiterhin für frühere Versionen von Chrome und Firefox.
Jedes Mal, wenn Sie zu einer neuen Seite navigieren, die in den Bereich eines Servicemitarbeiters fällt, stellt Chrome eine Standard-HTTP-Anforderung für die JavaScript-Ressource, die an den navigator.serviceWorker.register()
Aufruf übergeben wurde. Nehmen wir an, es heißt service-worker.js
. Diese Anfrage wird nur in Verbindung mit einer Navigation gestellt oder wenn ein Servicemitarbeiter beispielsweise über ein push
Ereignis geweckt wird . Es gibt keinen Hintergrundprozess, bei dem jedes Service Worker-Skript alle 24 Stunden neu abgerufen wird, oder etwas, das so automatisiert ist.
Diese HTTP-Anforderung entspricht mit einer Ausnahme (die im nächsten Absatz behandelt wird) den Standard- HTTP-Cache-Anweisungen . Wenn Ihr Server beispielsweise geeignete HTTP-Antwortheader festgelegt hat, die angeben, dass die zwischengespeicherte Antwort 1 Stunde lang verwendet werden soll, wird die Anforderung des Browsers innerhalb der nächsten Stunde service-worker.js
vom Cache des Browsers erfüllt. Beachten Sie, dass es sich nicht um die Cache-Speicher-API handelt , die in dieser Situation nicht relevant ist, sondern um das Standard-HTTP-Caching des Browsers .
Die einzige Ausnahme zu den Standardregeln für das HTTP-Caching, und hier kommt die 24-Stunden-Sache ins Spiel, ist, dass Browser immer zum Netzwerk gehen, wenn das Alter des service-worker.js
Eintrags im HTTP-Cache mehr als 24 Stunden beträgt. Funktionell gibt es also keinen Unterschied bei der Verwendung max-age
von 1 Tag, 1 Woche oder 1 Jahr - sie werden alle so behandelt, als wäre max-age
es 1 Tag.
Browser-Anbieter möchten sicherstellen, dass Entwickler nicht versehentlich einen "defekten" oder fehlerhaften Buggy auf den Markt bringen service-worker.js
, der innerhalb eines max-age
Jahres gewartet wird, sodass die Benutzer über einen längeren Zeitraum hinweg möglicherweise ein dauerhaftes, defektes Web-Erlebnis haben. (Sie können sich nicht darauf verlassen, dass Ihre Benutzer wissen, dass sie ihre Site-Daten löschen oder die Site neu laden müssen.)
Einige Entwickler bevorzugen es, ihre service-worker.js
Antworten explizit mit Antwortheadern zu versehen, wodurch das gesamte HTTP-Caching deaktiviert wird. Dies bedeutet, dass service-worker.js
für jede Navigation eine Netzwerkanforderung gestellt wird. Ein anderer Ansatz könnte darin bestehen, einen sehr, sehr kurzen zu verwendenmax-age
Zeit - etwa eine Minute - zu verwenden, um ein gewisses Maß an Drosselung bereitzustellen, falls ein einzelner Benutzer eine sehr große Anzahl schneller Navigationen durchführt. Wenn Sie Anfragen wirklich minimieren möchten und sicher sind, dass Sie Ihre nicht service-worker.js
bald aktualisieren werden , können Sie eine max-age
24-Stunden- Frist festlegen. Ich würde jedoch empfehlen, bei der Off-Chance, die Sie unerwartet für eine erneute Bereitstellung benötigen, eine kürzere Option zu wählen.
fetch
Ereignishandler eines Service Workers wird nicht ausgelöst, wenn die Seite ein Service Worker-Skript zur Registrierung anfordert.