2016-08-09 19 views

Antwort

85

Hinweis: As of Firefox 57, das Standardverhalten wurde geändert, um die updated service worker specification zu berücksichtigen. In Firefox 57+ werden HTTP-Cachedirektiven standardmäßig ignoriert, wenn das Service-Worker-Skript auf Aktualisierungen überprüft wird. Die folgende Beschreibung gilt nach wie vor als 2017. Oktober

Every Zeit Chrome Sie zu einer neuen Seite navigieren, die im Rahmen eines Service-Mitarbeiters Rahmen ist, Chrome wird eine Standard-HTTP-Anforderung für die JavaScript-Ressource machen, die in zu übergeben wurden der navigator.serviceWorker.register() Aufruf. Nehmen wir an, es heißt . Diese Anfrage wird nur in Verbindung mit einer Navigation oder wenn ein Kundendienstmitarbeiter beispielsweise über ein Ereignis push geweckt wird, getätigt. Es gibt nicht ein Hintergrundprozess, der jedes Service Worker-Skript alle 24 Stunden wiederholt, oder irgendetwas, das so automatisiert wird.

Diese HTTP-Anforderung wird dem Standard HTTP cache directives mit einer Ausnahme (die im nächsten Absatz behandelt wird) gehorchen. Wenn Ihr Server beispielsweise entsprechende HTTP-Antwortheader definiert, die angeben, dass die zwischengespeicherte Antwort eine Stunde lang verwendet werden soll, wird die Anforderung des Browsers für service-worker.js innerhalb der nächsten Stunde vom Cache des Browsers erfüllt. Beachten Sie, dass wir nicht sprechen über die Cache Storage API, die in dieser Situation nicht relevant ist, sondern eher standard browser HTTP caching.

Die einzige Ausnahme zu den Standard-HTTP-Caching-Regeln, und das ist die 24-Stunden-Sache, dass Browser immer zum Netzwerk gehen, wenn das Alter des service-worker.js Eintrags im HTTP-Cache größer als 24 Stunden ist. Also, funktionell gibt es keinen Unterschied in der Verwendung eines max-age von 1 Tag oder 1 Woche oder 1 Jahr - sie werden alle behandelt, als ob die max-age 1 Tag war.

Browser-Anbieter möchten sicherstellen, dass Entwickler nicht versehentlich einen "fehlerhaften" oder fehlerhaften service-worker.js ausrollen, der mit einem max-age von 1 Jahr geliefert wird, was die Benutzer mit einer dauerhaften, unterbrochenen Web-Erfahrung für einen langen Zeitraum belässt von Zeit. (Sie können sich nicht darauf verlassen, dass Ihre Benutzer die Site-Daten löschen oder die Site neu laden.)

Einige Entwickler bevorzugen es, ihre service-worker.js mit Antwortheadern explizit bereitzustellen, wodurch alle HTTP-Caching deaktiviert werden, was bedeutet, dass Eine Netzwerkanforderung für service-worker.js wird für jede Navigation erstellt. Ein anderer Ansatz könnte darin bestehen, einen sehr, sehr kurzen max-age -Stunden pro Minute- zu verwenden, um ein gewisses Maß an Drosselung bereitzustellen, falls eine sehr große Anzahl schneller Navigationen von einem einzelnen Benutzer vorliegt. Wenn Sie wirklich Anfragen minimieren möchten und sicher sind, dass Sie Ihre service-worker.js nicht in absehbarer Zeit aktualisieren werden, können Sie eine max-age von 24 Stunden einstellen, aber ich würde empfehlen, etwas kürzer zu machen, wenn Sie es unerwartet brauchen erneut bereitstellen.

+0

danke Jeff für nette Erklärung. klärte alle Fragen. –

+0

Was passiert, wenn ein Service-Worker-Aufruf im Abruf abgefangen und zwischengespeichert wird? Läuft das auch nach einem Tag ab? – Pankaj

+1

Der 'fetch'-Ereignishandler eines Service-Arbeiters wird nicht ausgelöst, wenn die Seite ein Service-Worker-Skript zur Registrierung anfordert. –