Service Worker
Service Worker bezeichnet eine moderne Browsertechnologie, die mittels JavaScript einen Proxy zwischen dem Webbrowser und dem Server bereitstellt, der vielfältig genutzt werden kann. Der bekannteste Einsatzzweck ist es, bestimmte Seiten auch offline verfügbar zu machen. Daneben bieten Service Worker auch die Grundlage für Push-Benachrichtigungen, progressive Web-Apps und weitere Verwendungen.
Grundlagen
Technisch gesehen ist ein Service Worker ein spezieller Web Worker, bietet also eine Möglichkeit, JavaScript unabhängig vom Hauptthread auszuführen. Die Besonderheit des Service Workers besteht darin, dass er bestimmte Dienste für die ihm zugeordneten Seiten übernehmen kann und auch dann aktiv sein kann, wenn der Benutzer keine dieser Seiten aufgerufen hat.
Um einen Missbrauch als Man-in-the-Middle zu verhindern, sind Service Worker nur innerhalb eines sicheren Kontexts erlaubt, also in der Regel nur über HTTPS.
Zum Einsatz wird der Service Worker zunächst über die JavaScript-Funktion navigator.serviceWorker.register
registriert. Dabei kann angegeben werden, ob der Service Worker für alle Seiten der aktuellen Domain gelten soll oder nur für solche, die sich in einem bestimmten Pfad befinden. Der Browser wird die angegebene Skript-Datei anschließend herunterladen und initialisieren. Sobald dies geschehen ist, steht der Service Worker künftig für alle ihm zugeordneten Seiten bereit. Bereits im Browser geöffnete Seiten müssen zunächst neu geladen werden, bevor sie vom neu eingerichteten Service Worker kontrolliert werden können.
Unabhängig von den angegebenen Einstellungen zum Cache wird der Browser den Service Worker einmal alle 24 Stunden neu herunterladen, sofern eine Internetverbindung besteht. Damit soll vermieden werden, dass ein fehlerhafter Worker dauerhaft im Einsatz bleibt, wenn auch die Angaben zum Cache ungünstig gewählt waren. Liegt eine neue Version vor, so wird diese initialisiert und steht für alle neu aufgerufenen Seiten bereit.
Einsatzzwecke
Offline-Nutzung
Der bekannteste Einsatzzweck ist die Offline-Nutzung von Webseiten. Hier löst der Service Worker den Application Cache ab.[1]
Um eine Internetseite mit Hilfe eines Service Workers offline nutzbar zu machen, geht man im einfachsten Fall so vor:
Beim Initialisieren des Workers (dem einzigen Zeitpunkt, zu dem eine Internetverbindung notwendig ist) werden alle benötigten Ressourcen heruntergeladen und gespeichert. Hierzu kann prinzipiell jeder verfügbare Speicher genutzt werden, etwa die Indexed Database API, in der Regel kommt aber ein spezieller Cache-Speicher zum Einsatz, der zwar unabhängig vom gewöhnlichen Browsercache ist, aber wie dieser Ressourcen anhand ihrer URL speichert.
Anschließend muss der Service Worker nur auf fetch
-Events reagieren. Dieses besondere Ereignis wird immer dann ausgelöst, wenn eine vom Worker überwachte Seite eine neue Ressource anfordert. Dies kann durch die Navigation des Benutzers auftreten, dadurch, dass eine aufgerufene Seite weitere Elemente wie Bilder oder Stylesheets einbindet, oder weil mittels AJAX dynamisch Daten geladen werden sollen. Ist die angeforderte Ressource im Cache des Service Workers vorhanden, so kann er sie einfach übergeben, eine Internetverbindung ist nicht notwendig.
Push-Benachrichtigungen
Ein weiteres Einsatzgebiet für Service Worker sind Push-Benachrichtigungen, also vom Server versandte Benachrichtigungen, die den Benutzer auch dann erreichen sollen, wenn dieser gerade keine entsprechende Seite im Browser geöffnet hat.
Hierzu wird zunächst über dem zum Service Worker gehörenden Push-Manager die Push-Benachrichtigung aktiviert. Dabei wird dem Server, der die Push-Benachrichtigungen versenden soll, eine URL mitgeteilt, an die er die Benachrichtigungen schicken soll. Der Server wird vom jeweiligen Browserhersteller betrieben und fungiert als Proxy zwischen dem Dienst und dem Benutzer.
Anschließend wird der Service Worker über push
-Events informiert, wenn es eine neue Nachricht gibt, auch wenn gerade keine Seite im Browser geöffnet ist, die er überwacht. Als Reaktion auf dieses Ereignis sollte der Worker eine sichtbare Benachrichtigung erzeugen und je nach Wunsch des Benutzers eine Seite mit weiteren Informationen in einem neuen Browsertab laden oder eine bereits geöffnete Seite in den Vordergrund holen.
Weitere Einsatzmöglichkeiten
Besonders in seiner Funktion als Proxy kann ein Service Worker vielfältig eingesetzt werden. Neben komplexeren Cache-Strategien als einer reinen Offline-Speicherung können beispielsweise Load-Balancer implementiert werden.[2]
Browserunterstützung
Außer dem Internet Explorer unterstützen alle gängigen Browser Service Worker (Stand Juni 2018); Firefox (ab Version 44), Google Chrome (ab Version 40), Microsoft Edge (ab Version 17), Apple Safari (ab Version 11.1) und Opera (ab Version 27).[3] Neben dem Umfang der Unterstützung unterscheiden sich die Browser vor allem in den Debugging-Werkzeugen für Service Worker.
Weblinks
- Spezifikationen: Service Workers, Push API
- ServiceWorker Cookbook (englisch)
- Service Worker API auf MDN Web Docs
- Is ServiceWorker ready? Übersicht über den Stand der Implementierung in verschiedenen Browsern
Einzelnachweise
- Service Workers. Motivation. W3C-Draft vom 25. Juni 2015.
- Salva: Beyond Offline. In: Mozilla Hacks. 21. Dezember 2015, abgerufen am 30. März 2017 (englisch).
- Can I use: Service Workers. Abgerufen am 30. März 2017 (englisch).