Sobes.tech
Middle

Was sind Web-Worker und wozu sind sie nützlich?

sobes.tech KI

Antwort von AI

Web-Worker sind eine Möglichkeit, JavaScript-Code in einem Hintergrund-Thread auszuführen, getrennt vom Haupt-UI-Thread des Browsers.

Zweck:

  • Ausführen ressourcenintensiver Berechnungen, ohne den Haupt-Thread zu blockieren, was ein Einfrieren der Oberfläche verhindert.
  • Verarbeitung großer Datenmengen oder Durchführung langer Operationen (z.B. Parsing, Komprimierung, Netzwerk-Anfragen in einigen Fällen) im Hintergrund.
  • Verbesserung der Leistung und Reaktionsfähigkeit von Webanwendungen.

Arten von Web-Workern:

  1. Dedicated Worker: Verbunden mit dem Skript, das ihn erstellt hat.
  2. Shared Worker: Kann zwischen mehreren Skripten, die in verschiedenen Fenstern oder Tabs derselben Domain laufen, geteilt werden.
  3. Service Worker: Abfängt Netzwerk-Anfragen, verwaltet das Caching, bietet Offline-Zugriff, unterstützt Push-Benachrichtigungen.

Beispiel für die Erstellung und Verwendung eines Dedicated Worker:

// main.js (Haupt-Thread)
const worker = new Worker('worker.js');

// Nachricht an den Worker senden
worker.postMessage('Starte schwere Berechnungen');

// Nachricht vom Worker empfangen
worker.onmessage = function(event) {
  console.log('Vom Worker empfangen:', event.data);
};

// worker.js (Code des Workers)
self.onmessage = function(event) {
  console.log('Im Worker empfangen:', event.data);

  // Simulation schwerer Berechnungen
  let result = 0;
  for (let i = 0; i < 1000000000; i++) {
    result += i;
  }

  // Nachricht zurück an den Haupt-Thread senden
  self.postMessage('Berechnungen abgeschlossen, Ergebnis: ' + result);
};

Einschränkungen:

  • Kein direkter Zugriff auf das DOM.
  • Es dürfen keine globalen Variablen des Haupt-Threads verwendet werden (z.B. window, document).
  • Die Kommunikation erfolgt asynchron über Nachrichten (postMessage und onmessage/addEventListener('message')).
  • Daten zwischen Threads werden durch Kopieren übertragen (structured clone algorithm), aber für große Daten können Transferable Objects verwendet werden, um sie per Referenz zu übertragen (Verlust des Zugriffs im ursprünglichen Thread).