Service Worker-Registrierung

Best Practices für das Timing der Service Worker-Registrierung

Service Mitarbeiter:innen wiederholte Besuche Ihrer Webanwendung deutlich beschleunigen. Sie sollten jedoch damit die Erstinstallation eines Service Workers beim ersten Besuch des Nutzers.

Im Allgemeinen sollten Sie den Service Worker Registrierung nach dem Laden der ersten Seite aktiviert ist, insbesondere auf Mobilgeräten mit langsameren Netzwerkverbindungen.

Standard-Boilerplate für die Registrierung

Wenn Sie jemals von Service Workern gelesen haben, Textbausteine im Wesentlichen ähnlich wie die folgenden:

if ('serviceWorker' in navigator) {
    navigator.serviceWorker.register('/service-worker.js');
}

Dazu werden manchmal console.log()-Anweisungen oder Code die eine Aktualisierung einer früheren Service Worker-Registrierung erkennt, und die Nutzer darüber informieren, dass sie die Seite aktualisieren sollen. Aber das sind nur kleine Abweichungen nur wenige Zeilen Code.

Gibt es einen Unterschied bei navigator.serviceWorker.register? Gibt es Best Practices beachten? Nicht überraschend (da dieser Artikel hier), lautet die Antwort auf beide Fragen „Ja!“

Erster Besuch eines Nutzers

Angenommen, ein Nutzer verwendet zum ersten Mal eine Webanwendung. Es gibt noch keinen Service Worker. und der Browser weiß nicht im Voraus, ob ein Service Worker, der schließlich installiert wird.

Als Entwickler sollten Sie darauf achten, erhält nur die minimalen kritischen Ressourcen, die zum Anzeigen einer interaktiven Sitzung erforderlich sind. Seite. Alles, was das Abrufen dieser Antworten verlangsamt, ist der Feind eines in kürzerer Zeit interaktiver Erfahrung.

Stellen Sie sich nun vor, dass beim Herunterladen des JavaScript-Codes oder der Bilder, die Ihre Seite rendern muss, startet der Browser einen Hintergrundthread (der Einfachheit halber nehmen wir an, dass es sich um einen Thread handelt). Angenommen, nicht mit einem leistungsstarken Desktop-Computer arbeiten, Mobiltelefon, das in den meisten Ländern als ihr Hauptgerät betrachtet wird. Wird hochgefahren führt dieser zusätzliche Thread zu Konflikten in Bezug auf die CPU-Zeit und den Arbeitsspeicher, die Ihr Browser die normalerweise für das Rendern einer interaktiven Webseite aufgewendet werden könnten.

Ein inaktiver Hintergrundthread macht wahrscheinlich keinen großen Unterschied. Aber was ist wenn dieser Thread nicht inaktiv ist, sondern stattdessen entscheidet, dass er Ressourcen aus dem Netzwerk herunterladen? Bedenken hinsichtlich der CPU oder des Arbeitsspeichers um sich Sorgen wegen der begrenzten Bandbreite machen, auf vielen Mobilgeräten verfügbar. Bandbreite ist kostbar, also schränkt sie nicht ein indem Sie sekundäre Ressourcen gleichzeitig herunterladen.

Das alles bedeutet, dass ein neuer Service Worker-Thread zum Herunterladen erstellt wird. und im Hintergrund gespeicherte Ressourcen im Hintergrund zu speichern, die kürzeste Zeit für die Interaktion beim ersten Besuch Ihrer Website Website.

Standardtext verbessern

Die Lösung besteht darin, den Start des Service Workers zu steuern, indem Sie den Zeitpunkt für den Aufruf auswählen. navigator.serviceWorker.register() Eine einfache Faustregel lautet: Registrierung bis nach dem load event wird am window ausgelöst. Beispiel:

if ('serviceWorker' in navigator) {
    window.addEventListener('load', function() {
    navigator.serviceWorker.register('/service-worker.js');
    });
}

Der richtige Zeitpunkt für die Service Worker-Registrierung kann was Ihre Webanwendung direkt nach dem Laden tut. Zum Beispiel die Google I/O Web-App von 2016 enthält eine kurze Animation. bevor du zum Hauptbildschirm wechselst. Unser Team gefunden, die die kann es zu Verzögerungen kommen, wenn die Service Worker-Registrierung entfernt wird. auf Low-End-Mobilgeräten. Wir bieten den Nutzern kein schlechtes Erlebnis, verspätet Service Worker-Registrierung erst nach der Animation, wenn der Browser am meisten mit einigen Sekunden Inaktivität.

Das Gleiche gilt, wenn Ihre Webanwendung ein Framework verwendet, das nach dem die Seite geladen wurde, suchen Sie nach einem Framework-spezifischen Ereignis, das signalisiert, dass die Arbeit erledigt ist.

Nachfolgende Besuche

Bis jetzt haben wir uns auf den ersten Besuch konzentriert. Aber welche Auswirkungen hat Gibt es bei verspäteten Service Worker-Registrierungen Ihre Website bei wiederholten Besuchen? Das mag vielleicht einige Menschen überraschen, aber es sollte überhaupt keine Auswirkungen haben.

Wenn ein Service Worker registriert ist, durchläuft er install und activate Lebenszyklus Ereignisse. Sobald ein Service Worker aktiviert ist, kann er fetch-Ereignisse für beliebige nachfolgende Besuche Ihrer Webanwendung. Der Service Worker startet vor der Anfrage für alle unter diesem Geltungsbereich fallenden Seiten gestellt wird. Dies ist sinnvoll, wenn Sie mehr darüber erfahren. Wenn der vorhandene Service Worker noch nicht vor besucht, konnten die fetch-Ereignisse für Navigationsanfragen.

Sobald also ein aktiver Service Worker vorhanden ist, navigator.serviceWorker.register() oder ob du es überhaupt nennst. Wenn Sie die URL des Service Worker-Skripts nicht ändern, navigator.serviceWorker.register() ist effektiv ein no-op bei nachfolgenden Besuchen. Wenn es aufgerufen wird, ist irrelevant.

Gründe für eine frühzeitige Anmeldung

Gibt es Szenarien, in denen die Registrierung Ihres Service Workers sinnvoll ist? Wenn Ihr Service Worker clients.claim() um beim ersten Besuch die Kontrolle über die Seite zu übernehmen, und der Service Worker führt die Laufzeit Caching innerhalb des fetch-Handlers. In dieser Situation gibt es den Service Worker so schnell wie möglich zu aktivieren, seine Laufzeit-Caches mit Ressourcen füllen, die sich später als nützlich erweisen könnten. Wenn dass Ihre Webanwendung in diese Kategorie fällt, sollten Sie einen Schritt zurückgehen, darf der install-Handler Ihres Service Workers Ressourcen, die mit den Anfragen der Hauptseite um Bandbreite konkurrieren.

Dinge ausprobieren

Eine gute Möglichkeit, einen ersten Besuch zu simulieren, besteht darin, Ihre Webanwendung in einem Chrome-Browser Inkognito Fenster und den Netzwerkverkehr im Chrome-System Entwicklertools. Als Web- laden Sie eine lokale Instanz Ihrer Webanwendung wahrscheinlich Dutzende Male am Tag. Wenn Sie jedoch Ihre Website erneut aufrufen, Service Worker und vollständig gefüllte Caches verwenden, ist die Nutzung neue Nutzende erhalten und potenzielle Probleme können leicht ignoriert werden.

Das folgende Beispiel verdeutlicht den Unterschied, machen. Beide Screenshots werden während des Besuchs eines Beispiels App in Inkognitomodus mit Netzwerkdrosselung, um eine langsame Verbindung zu simulieren.

Netzwerktraffic mit vorzeitiger Registrierung.

Der obige Screenshot zeigt den Netzwerktraffic bei der Änderung des Beispiels. Service Worker-Registrierung so schnell wie möglich durchführen. Sie können sehen, Precaching-Anfragen (die Einträge mit dem Zahnradsymbol Symbol daneben, vom install-Handler des Service Workers, dazwischen Anfragen für die anderen Ressourcen, die zum Anzeigen der Seite erforderlich sind.

Netzwerktraffic mit verspäteter Registrierung.

Im Screenshot oben wurde die Service Worker-Registrierung erst nach dem Seite geladen wurde. Wie Sie sehen, werden die Precaching-Anfragen erst gestartet, die Ressourcen aus dem Netzwerk abgerufen wurden, wodurch Konflikte Bandbreite. Da sich einige der Elemente, für die wir vorbereiten, bereits in Aus dem HTTP-Cache des Browsers: die Elemente mit (from disk cache) in der Größe können wir den Cache des Service Workers füllen, ohne noch einmal versuchen.

Bonuspunkte gibt es, wenn Sie diese Art von Test von einem tatsächlichen Low-End-Gerät aus auf einem wie das echte Mobilfunknetz ist. Nutzen Sie die Vorteile der Remote-Debugging-Funktion von Chrome, Funktionen um ein Android-Telefon über USB an Ihren Desktop-Computer anzuschließen, und stellen Sie sicher, dass die durchgeführten Tests die realen Erfahrungen vieler Ihrer Nutzenden.

Fazit

Zusammenfassend lässt sich sagen, dass Nutzer den ersten Besuch so einfach wie möglich gestalten können. sollte oberste Priorität haben. Die Service Worker-Registrierung wird erst nach dem die beim ersten Besuch geladen wurde, können Sie dies sicherstellen. Sie erhalten trotzdem die Vorteile eines Service Workers für wiederholte Besuche zu nutzen.

Eine einfache Methode, um die anfängliche Ausführung des Service Workers zu verzögern nach dem Laden der ersten Seite ist, verwenden Sie Folgendes:

if ('serviceWorker' in navigator) {
    window.addEventListener('load', function() {
    navigator.serviceWorker.register('/service-worker.js');
    });
}