Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Service Worker und Offline-Betrieb

Nach dieser Lektion: Ich kann erklären, wie eine Seite mit einem Service Worker offline arbeitet, und die passende Cache-Strategie wählen.

Lektion, 60 Min.1 BefehlLab für das mobile Web: eine responsive, installierbare Web-App im Browser bauen

Wie funktioniert eine Web-App ohne Netz?

Ein Service Worker ist ein Skript, das der Browser im Hintergrund neben der Seite ausführt und das die Anfragen der Seite abfangen kann. Damit antwortet eine Web-App aus gespeicherten Kopien und öffnet auch ohne Netz.

Das ist wichtig im Zug, im Keller der Bibliothek oder bei schwachem Empfang: Eine App, die dann nichts zeigt, wird nicht mehr geöffnet.

Am Ende dieser Lektion

Notiz

Ich kann erklären, wie eine Seite mit einem Service Worker offline arbeitet, und die passende Cache-Strategie wählen.

Schlüsselwörter

BegriffWas er bedeutetBeispiel
Service Workerein Skript, das im Hintergrund läuft und Anfragen der Seite abfangen kann
Cacheein Speicher für Kopien von Dateien
Offlineohne Verbindung zum Netz
Strategiedie Regel, ob eine Antwort aus dem Cache oder aus dem Netz kommt
Registrierungder Aufruf, mit dem die Seite dem Browser den Worker nenntserviceWorker.register
Sichere Adresseeine Adresse mit https, nur auf ihr erlaubt der Browser Service Worker

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Ein Service Worker steht zwischen Seite und Netz

Jede Anfrage der Seite nach einer Datei geht zuerst an den Service Worker. Er entscheidet: Antworte ich aus dem Cache, oder frage ich das Netz?

Der Worker ist ein eigenes Skript und kann die Seite nicht direkt verändern. Die Seite meldet ihn mit navigator.serviceWorker.register an. Der Browser erlaubt das nur auf einer sicheren Adresse.

Das Lab prüft die Liste der Dateien

Die App des Labs hat einen Service Worker. Er nennt einen Cache und eine Liste von Dateien, die er beim Installieren speichern will. Das Skript prüft, ob jede Datei der Liste existiert.

Die Ausgabe ist englisch: cache name ist der Name des Caches, files to cache die Zahl der Dateien, exists heißt vorhanden, MISSING heißt fehlt. Ob der Browser den Worker auf der Vorschau-Adresse zulässt, sagt seine Konsole.

Die Dateiliste des Service Workers prüfen

Befehl
docker exec jupyter python3 steps/offline.py

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Installieren speichert die ganze Liste oder nichts

Beim Installieren ruft der Worker cache.addAll mit der Liste auf. Der Browser speichert dann alle Dateien. Kann er nur eine nicht laden, scheitert der ganze Aufruf, und der Worker wird nicht installiert.

Darum muss jeder Eintrag der Liste existieren. Ein Tippfehler im Namen reicht, und die App ist nicht offline nutzbar.

Ein Beispiel: ein Service Worker für die Mensa

Code: web
const CACHE = "mensa-v1";
const DATEIEN = ["/", "/style.css", "/app.js"];

self.addEventListener("install", (ereignis) => {
  ereignis.waitUntil(caches.open(CACHE).then((cache) => cache.addAll(DATEIEN)));
});

self.addEventListener("fetch", (ereignis) => {
  ereignis.respondWith(
    caches.match(ereignis.request).then((treffer) => treffer || fetch(ereignis.request))
  );
});

Der Name des Caches trägt eine Version

Der Name mensa-v1 enthält eine Versionsnummer. Ändern Sie die Dateien, geben Sie dem Cache einen neuen Namen, etwa mensa-v2. So erkennt der Worker, dass alte Kopien veraltet sind.

Ohne neue Version zeigt eine App nach einer Änderung oft weiter die alte Seite, weil der Cache zuerst antwortet.

Aus dem Cache oder aus dem Netz?

Code: python
cache = ["/index.html", "/style.css"]

for adresse in ["/index.html", "/neu.html"]:
    if adresse in cache:
        print(adresse, "kommt aus dem Cache")
    else:
        print(adresse, "kommt aus dem Netz")
# Fügen Sie "/neu.html" zum Cache hinzu und starten Sie noch einmal.

Eine Strategie legt fest, wer zuerst antwortet

Bei Cache zuerst (cache-first) antwortet der Cache, wenn er eine Kopie hat, sonst das Netz. Das ist schnell und passt zu Dateien, die sich selten ändern. Bei Netz zuerst (network-first) antwortet das Netz, und nur bei einem Ausfall der Cache.

Bei Stale while revalidate zeigt der Cache sofort die alte Kopie, und im Hintergrund holt der Worker eine neue.

Ein Beispiel: welche Strategie wofür passt

StrategieAntwortet zuerstPasst zu
cache-firstCacheSymbole, Schrift, Stylesheet
network-firstNetzSpeiseplan von heute
stale-while-revalidateCache, dann AktualisierungListe, die sich langsam ändert
cache-onlyNur CacheDateien, die beim Installieren gespeichert wurden
network-onlyNur NetzZahlungen, die nie veraltet sein dürfen

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Ein häufiger Fehler

Warnung

Viele denken, ein Service Worker mache die App sofort offline nutzbar. Die Seite muss aber erst einmal mit Netz geladen werden, damit der Worker installiert und die Kopien gespeichert sind. Erst danach geht es ohne Netz.

Über dieses Lab und seinen Quellcode: Lab für das mobile Web: eine responsive, installierbare Web-App im Browser bauen

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.