Odpowiedzi:
Istnieje duża różnica w tym, do czego są przeznaczone:
Pracownicy sieciowi
Web Workers zapewniają prosty sposób na uruchamianie skryptów w treści WWW w wątkach w tle. Wątek roboczy może wykonywać zadania bez ingerencji w interfejs użytkownika. Ponadto mogą wykonywać operacje we / wy za pomocą XMLHttpRequest (chociaż atrybuty responseXML i kanał są zawsze zerowe). Po utworzeniu pracownik może wysyłać komunikaty do kodu JavaScript, który go utworzył, wysyłając komunikaty do modułu obsługi zdarzeń określonego przez ten kod (i odwrotnie).
Źródło - Korzystanie z zasobów sieciowych
Service Worker
Pracownicy usług zasadniczo działają jako serwery proxy, które znajdują się między aplikacjami internetowymi a przeglądarką i siecią (jeśli są dostępne). Mają one na celu (między innymi) umożliwienie tworzenia efektywnych doświadczeń offline, przechwytywania żądań sieciowych i podejmowania odpowiednich działań w oparciu o to, czy sieć jest dostępna, a zaktualizowane zasoby znajdują się na serwerze. Umożliwiają również dostęp do powiadomień push i interfejsów API synchronizacji w tle.
Dlatego pracownicy sieciowi są przydatni do uruchamiania kosztownych skryptów bez powodowania zawieszania się interfejsu użytkownika, podczas gdy pracownicy usług są przydatni do modyfikowania odpowiedzi na żądania sieciowe (na przykład podczas budowania aplikacji offline).
Odpowiedź Buksy'ego jest prawidłowa, ale moim zdaniem nie odpowiada na pierwotne pytanie, a mianowicie: "Co mogą zrobić pracownicy usług, czego pracownicy sieci nie mogą? Albo odwrotnie?"
Istnieją fundamentalne różnice w ich cyklu życia i liczbie instancji na źródło, które możesz mieć. W skrócie:
| Web Workers | Service Workers |
|--------------|--------------|------------------|
| Instances | Many per tab | One for all tabs |
| Lifespan | Same as tab | Independent |
| Intended use | Parallelism | Offline support |
Odpowiedź Buksy'ego to w zasadzie ostatni wiersz tabeli. Kredyt: Wziąłem tę tabelę od Demystifying Web Workers and Service Workers autorstwa Nolana Lawsona, zaczynając od slajdu 35 .
W szczególności, oto jak spawnujesz i usuwasz pracowników internetowych:
Korzystanie z pracowników sieci Web
mając na uwadze, że pracownicy usług mają swój własny cykl życia, który jest ich „najbardziej skomplikowaną częścią”:
Cykl życia elementu Service Worker
Tak więc styl życia jest podstawową różnicą między nimi (konsekwencją ich zamierzonego użycia).
Kiedyś istniała ogromna różnica w obsłudze przeglądarek : pracownicy serwisu nie byli w ogóle dostępni w Safari na iOS do 11.3 (29 marca 2018), zobacz Czy mogę korzystać z pracowników usług? Z drugiej strony pracownicy sieciowi mieli znacznie lepszą obsługę przeglądarek już w 2012 roku: Czy mogę korzystać z pracowników internetowych?
Jeśli musisz obsługiwać IE11, możesz używać tylko pracowników internetowych: IE11 nie ma pracowników usług i najwyraźniej koniec wsparcia dla IE11 przypada na 14 października 2025 r .
Istnieją subtelne różnice w obsłudze interfejsów API w różnych przeglądarkach, zobacz HTML5 Worker Test (również autorstwa Nolana Lawsona). W określonej przeglądarce jeden rodzaj pracownika może obsługiwać określone wywołanie interfejsu API, podczas gdy drugi nie. Odwiedź tę stronę i przetestuj własną przeglądarkę!