Antworten:
Es gibt einen großen Unterschied, wofür sie bestimmt sind:
Web Worker
Web Worker bieten eine einfache Möglichkeit für Webinhalte, Skripts in Hintergrundthreads auszuführen. Der Worker-Thread kann Aufgaben ausführen, ohne die Benutzeroberfläche zu beeinträchtigen. Darüber hinaus können sie E / A mit XMLHttpRequest ausführen (obwohl die Attribute responseXML und channel immer null sind). Nach der Erstellung kann ein Mitarbeiter Nachrichten an den JavaScript-Code senden, der sie erstellt hat, indem er Nachrichten an einen durch diesen Code angegebenen Ereignishandler sendet (und umgekehrt).
Quelle - Verwenden von Web Workern
Servicemitarbeiter
Servicemitarbeiter fungieren im Wesentlichen als Proxyserver, die sich zwischen Webanwendungen sowie dem Browser und dem Netzwerk befinden (sofern verfügbar). Sie sollen (unter anderem) die Erstellung effektiver Offline-Erlebnisse ermöglichen, Netzwerkanforderungen abfangen und geeignete Maßnahmen ergreifen, je nachdem, ob das Netzwerk verfügbar ist und aktualisierte Assets auf dem Server gespeichert sind. Sie ermöglichen auch den Zugriff auf Push-Benachrichtigungen und Hintergrundsynchronisierungs-APIs.
Web Worker sind daher praktisch, um teure Skripte auszuführen, ohne dass die Benutzeroberfläche einfriert, während Service Worker nützlich sind, um die Antwort von Netzwerkanforderungen zu ändern (z. B. beim Erstellen einer Offline-App).
Buksys Antwort ist richtig, aber meiner Meinung nach beantwortet sie nicht die ursprüngliche Frage: "Was können Servicemitarbeiter tun, was Web-Mitarbeiter nicht können? Oder umgekehrt?"
Es gibt grundlegende Unterschiede in ihrem Lebenszyklus und der Anzahl der Instanzen pro Ursprung, die Sie haben können. Zusamenfassend:
| Web Workers | Service Workers |
|--------------|--------------|------------------|
| Instances | Many per tab | One for all tabs |
| Lifespan | Same as tab | Independent |
| Intended use | Parallelism | Offline support |
Buksys Antwort ist im Grunde die letzte Zeile der Tabelle. Gutschrift: Ich habe diese Tabelle von Nolan Lawson ab Folie 35 aus Demystifying Web Workers and Service Workers entnommen .
Im Folgenden erfahren Sie insbesondere, wie Sie Web-Worker erzeugen und beenden:
in der Erwägung, dass Servicemitarbeiter ihren eigenen Lebenszyklus haben, was zugegebenermaßen ihr "kompliziertester Teil" ist:
Der Service Worker-Lebenszyklus
Der Lebensstil ist also ein grundlegender Unterschied zwischen den beiden (eine Folge ihrer beabsichtigten Verwendung).
Früher gab es einen großen Unterschied in der Browserunterstützung : Servicemitarbeiter waren in Safari für iOS bis 11.3 (29. März 2018) überhaupt nicht verfügbar. Siehe Kann ich Servicemitarbeiter verwenden? Im Gegensatz dazu hatten Web-Worker bereits 2012 eine viel bessere Browser-Unterstützung: Kann ich Web-Worker verwenden?
Wenn Sie IE11 unterstützen müssen, können Sie nur Web-Worker verwenden: IE11 verfügt nicht über Service-Worker, und anscheinend endet die Unterstützung für IE11 am 14. Oktober 2025 .
Es gibt subtile Unterschiede in der API-Unterstützung zwischen den Browsern, siehe HTML5 Worker Test (ebenfalls von Nolan Lawson). In einem bestimmten Browser unterstützt möglicherweise eine Art von Worker einen bestimmten API-Aufruf, die andere nicht. Besuchen Sie diese Seite und testen Sie Ihren eigenen Browser!