Deutsch

Erfahren Sie, wie Sie mit Service Workern Offline-First-Webanwendungen erstellen, die schnell, zuverlässig und ansprechend für Nutzer weltweit sind.

Service Worker: Erstellung von Offline-First-Webanwendungen

In der heutigen Welt erwarten Benutzer, dass Webanwendungen schnell, zuverlässig und zugänglich sind, selbst wenn die Netzwerkverbindung eingeschränkt oder nicht verfügbar ist. Hier kommt das Konzept des „Offline-First“-Designs ins Spiel. Service Worker sind eine leistungsstarke Technologie, die es Entwicklern ermöglicht, Webanwendungen zu erstellen, die nahtlos offline funktionieren und so eine überlegene Benutzererfahrung bieten.

Was sind Service Worker?

Ein Service Worker ist eine JavaScript-Datei, die im Hintergrund läuft, getrennt vom Haupt-Thread des Browsers. Er fungiert als Proxy zwischen der Webanwendung und dem Netzwerk, fängt Netzwerkanfragen ab und verwaltet das Caching. Service Worker können Aufgaben übernehmen wie:

Wichtig ist, dass Service Worker vom Browser gesteuert werden, nicht von der Webseite. Dies ermöglicht es ihnen, auch dann zu funktionieren, wenn der Benutzer den Tab oder das Browserfenster geschlossen hat.

Warum Offline-First?

Die Erstellung einer Offline-First-Webanwendung bietet zahlreiche Vorteile:

Wie Service Worker funktionieren

Der Lebenszyklus eines Service Workers besteht aus mehreren Phasen:

  1. Registrierung: Der Service Worker wird beim Browser registriert, wobei der Geltungsbereich der Anwendung festgelegt wird, den er steuern soll.
  2. Installation: Der Service Worker wird installiert, wobei er typischerweise statische Assets zwischenspeichert.
  3. Aktivierung: Der Service Worker wird aktiviert und übernimmt die Kontrolle über die Webanwendung. Dies kann das Abmelden alter Service Worker und das Bereinigen alter Caches beinhalten.
  4. Leerlauf: Der Service Worker bleibt im Leerlauf und wartet auf Netzwerkanfragen oder andere Ereignisse.
  5. Fetch (Abruf): Wenn eine Netzwerkanfrage gestellt wird, fängt der Service Worker diese ab und kann entweder zwischengespeicherte Inhalte bereitstellen oder die Ressource aus dem Netzwerk abrufen.

Implementierung von Offline-First mit Service Workern: Eine Schritt-für-Schritt-Anleitung

Hier ist ein grundlegendes Beispiel, wie man Offline-First-Funktionalität mit Service Workern implementiert:

Schritt 1: Den Service Worker registrieren

In Ihrer Haupt-JavaScript-Datei (z. B. `app.js`):


if ('serviceWorker' in navigator) {
  navigator.serviceWorker.register('/service-worker.js')
    .then(function(registration) {
      console.log('Service Worker registered with scope:', registration.scope);
    })
    .catch(function(error) {
      console.log('Service Worker registration failed:', error);
    });
}

Dieser Code prüft, ob der Browser Service Worker unterstützt und registriert die Datei `service-worker.js`. Der Geltungsbereich (scope) definiert, welche URLs der Service Worker kontrollieren wird.

Schritt 2: Die Service-Worker-Datei erstellen (service-worker.js)

Erstellen Sie eine Datei namens `service-worker.js` mit dem folgenden Code:


const CACHE_NAME = 'my-site-cache-v1';
const urlsToCache = [
  '/',
  '/index.html',
  '/style.css',
  '/app.js',
  '/images/logo.png'
];

self.addEventListener('install', function(event) {
  // Perform install steps
  event.waitUntil(
    caches.open(CACHE_NAME)
      .then(function(cache) {
        console.log('Opened cache');
        return cache.addAll(urlsToCache);
      })
  );
});

self.addEventListener('fetch', function(event) {
  event.respondWith(
    caches.match(event.request)
      .then(function(response) {
        // Cache hit - return response
        if (response) {
          return response;
        }

        // IMPORTANT: Clone the request.
        // A request is a stream and can only be consumed once. Since we are consuming this
        // once by cache and once by the browser for fetch, we need to clone the response.
        var fetchRequest = event.request.clone();

        return fetch(fetchRequest).then(
          function(response) {
            // Check if we received a valid response
            if(!response || response.status !== 200 || response.type !== 'basic') {
              return response;
            }

            // IMPORTANT: Clone the response.
            // A response is a stream and needs to be consumed only once.
            var responseToCache = response.clone();

            caches.open(CACHE_NAME)
              .then(function(cache) {
                cache.put(event.request, responseToCache);
              });

            return response;
          }
        );
      })
    );
});

self.addEventListener('activate', function(event) {

  var cacheWhitelist = [CACHE_NAME];

  event.waitUntil(
    caches.keys().then(function(cacheNames) {
      return Promise.all(
        cacheNames.map(function(cacheName) {
          if (cacheWhitelist.indexOf(cacheName) === -1) {
            return caches.delete(cacheName);
          }
        })
      );
    })
  );
});

Dieser Code bewirkt Folgendes:

Schritt 3: Ihre Offline-Funktionalität testen

Um Ihre Offline-Funktionalität zu testen, können Sie die Entwicklertools des Browsers verwenden. Öffnen Sie in Chrome die DevTools, gehen Sie zum Tab „Application“ und wählen Sie „Service Workers“. Sie können dann den Offline-Modus simulieren, indem Sie das Kästchen „Offline“ ankreuzen.

Fortgeschrittene Service-Worker-Techniken

Sobald Sie ein grundlegendes Verständnis von Service Workern haben, können Sie fortgeschrittenere Techniken erkunden, um Ihre Offline-First-Anwendung zu verbessern:

Caching-Strategien

Es gibt mehrere Caching-Strategien, die Sie je nach Art der Ressource und den Anforderungen Ihrer Anwendung verwenden können:

Die Wahl der richtigen Caching-Strategie hängt von der spezifischen Ressource und den Anforderungen Ihrer Anwendung ab. Beispielsweise werden statische Assets wie Bilder und CSS-Dateien oft am besten mit der „Cache First“-Strategie bereitgestellt, während dynamische Inhalte von der „Network First“- oder „Cache then Network“-Strategie profitieren könnten.

Hintergrundsynchronisation

Die Hintergrundsynchronisation ermöglicht es Ihnen, Aufgaben aufzuschieben, bis der Benutzer eine stabile Netzwerkverbindung hat. Dies ist nützlich für Aufgaben wie das Absenden von Formularen oder das Hochladen von Dateien. Zum Beispiel könnte ein Benutzer in einer abgelegenen Gegend von Indonesien ein Formular ausfüllen, während er offline ist. Der Service Worker kann dann warten, bis eine Verbindung verfügbar ist, bevor er die Daten übermittelt.

Push-Benachrichtigungen

Service Worker können verwendet werden, um Push-Benachrichtigungen an Benutzer zu senden, auch wenn die Anwendung nicht geöffnet ist. Dies kann genutzt werden, um Benutzer erneut anzusprechen und zeitnahe Updates bereitzustellen. Stellen Sie sich eine Nachrichtenanwendung vor, die Eilmeldungen in Echtzeit an Benutzer sendet, unabhängig davon, ob die App aktiv läuft.

Workbox

Workbox ist eine Sammlung von JavaScript-Bibliotheken, die die Erstellung von Service Workern erleichtern. Sie bietet Abstraktionen für gängige Aufgaben wie Caching, Routing und Hintergrundsynchronisation. Die Verwendung von Workbox kann Ihren Service-Worker-Code vereinfachen und ihn wartbarer machen. Viele Unternehmen nutzen Workbox mittlerweile als Standardkomponente bei der Entwicklung von PWAs und Offline-First-Erlebnissen.

Überlegungen für ein globales Publikum

Bei der Erstellung von Offline-First-Webanwendungen für ein globales Publikum ist es wichtig, die folgenden Faktoren zu berücksichtigen:

Beispiele für Offline-First-Anwendungen

Mehrere beliebte Webanwendungen haben erfolgreich Offline-First-Funktionalität mithilfe von Service Workern implementiert:

Fazit

Service Worker sind ein leistungsstarkes Werkzeug zur Erstellung von Offline-First-Webanwendungen, die schnell, zuverlässig und ansprechend sind. Durch das Cachen von Assets, das Abfangen von Netzwerkanfragen und die Handhabung von Hintergrundaufgaben können Service Worker eine überlegene Benutzererfahrung bieten, selbst wenn die Netzwerkverbindung eingeschränkt oder nicht verfügbar ist. Da der Netzwerkzugang weltweit uneinheitlich bleibt, ist die Konzentration auf Offline-First-Designs entscheidend, um einen gerechten Zugang zu Informationen und Diensten im Web zu gewährleisten.

Indem Sie die in diesem Leitfaden beschriebenen Schritte befolgen und die oben genannten Faktoren berücksichtigen, können Sie Webanwendungen erstellen, die nahtlos offline funktionieren und Benutzern weltweit eine erfreuliche Erfahrung bieten. Nutzen Sie die Macht der Service Worker und gestalten Sie die Zukunft des Webs – eine Zukunft, in der das Web für jeden, überall und unabhängig von seiner Netzwerkverbindung zugänglich ist.