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:
- Dedicated Worker: Verbunden mit dem Skript, das ihn erstellt hat.
- Shared Worker: Kann zwischen mehreren Skripten, die in verschiedenen Fenstern oder Tabs derselben Domain laufen, geteilt werden.
- 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 (
postMessageundonmessage/addEventListener('message')). - Daten zwischen Threads werden durch Kopieren übertragen (structured clone algorithm), aber für große Daten können
Transferable Objectsverwendet werden, um sie per Referenz zu übertragen (Verlust des Zugriffs im ursprünglichen Thread).