Cosa possono fare i service worker che i web worker non possono fare?


109

Cosa possono fare i service worker che i web worker non possono fare? O vice versa?

Sembra che i web worker siano un sottoinsieme delle funzionalità dei service worker. È corretto?

Risposte:


140

C'è una grande differenza in ciò a cui sono destinati:

Web Workers

I web worker forniscono ai contenuti web un mezzo semplice per eseguire script nei thread in background. Il thread di lavoro può eseguire attività senza interferire con l'interfaccia utente. Inoltre, possono eseguire I / O utilizzando XMLHttpRequest (sebbene gli attributi responseXML e channel siano sempre nulli). Una volta creato, un lavoratore può inviare messaggi al codice JavaScript che lo ha creato inviando messaggi a un gestore eventi specificato da quel codice (e viceversa).

Fonte: utilizzo di web worker

Service Worker

I lavoratori del servizio agiscono essenzialmente come server proxy che si trovano tra le applicazioni Web e il browser e la rete (se disponibili). Hanno lo scopo (tra le altre cose) di consentire la creazione di esperienze offline efficaci, intercettando le richieste di rete e intraprendendo azioni appropriate in base alla disponibilità della rete e alle risorse aggiornate che risiedono sul server. Consentiranno inoltre l'accesso alle notifiche push e alle API di sincronizzazione in background.

Origine: API Service Worker

Quindi i Web Worker sono utili per eseguire script costosi senza causare il blocco dell'interfaccia utente, mentre i Service Worker sono utili per modificare la risposta alle richieste di rete (ad esempio, quando si crea un'app offline).


1
Cosa possono fare i service worker che i web worker non possono fare?
Pacerier

1
@Pacerier ha letto la seconda citazione e l'ultimo paragrafo per rispondere alla tua domanda
Buksy l'

Sono d'accordo con Pacerier che questo non risponde alla domanda. Dico solo cosa fa l'uno e cosa fa l'altro. Un lettore potrebbe giungere a una conclusione basata su di essa, ma una buona risposta dovrebbe chiarire, forse anche confermare o disconfermare una conclusione del lettore.
kicia

Mi piace l'altra risposta che Ali ha fornito, è una descrizione più ampia delle differenze tra questi due tecnici. Ma penso che l'ultimo paragrafo della mia risposta risponda chiaramente alla domanda, i Web Worker possono aiutarti a costruire l'app offline . Se pensi che ci sia una risposta migliore, sentiti libero di aggiungerne un'altra :)
Buksy

1
@ Buksy, un errore di battitura nel tuo commento: i [[Service]] I lavoratori possono aiutarti a creare l'app offline
Ahmad Mobaraki,

144

La risposta di Buksy è corretta ma a mio avviso non risponde alla domanda originale, ovvero: "Cosa possono fare i lavoratori dei servizi che i web worker non possono fare? O viceversa?"

Esistono differenze fondamentali nel loro ciclo di vita e nel numero di istanze per origine che puoi avere. In breve:

               | Web Workers  | Service Workers  |
|--------------|--------------|------------------|
| Instances    | Many per tab | One for all tabs |
| Lifespan     | Same as tab  | Independent      |
| Intended use | Parallelism  | Offline support  |

La risposta di Buksy è fondamentalmente l'ultima riga della tabella. Credito: ho preso questa tabella da Demystifying Web Workers and Service Workers di Nolan Lawson, a partire dalla diapositiva 35 .

In particolare, ecco come generare e terminare i web worker:

Utilizzo di web worker

considerando che i lavoratori dei servizi hanno il loro ciclo di vita, che è certamente la loro "parte più complicata":

Il ciclo di vita dei Service Worker

Quindi lo stile di vita è una differenza fondamentale tra i due (una conseguenza della loro destinazione d'uso).

C'era un'enorme differenza nel supporto del browser : i lavoratori del servizio non erano affatto disponibili in Safari per iOS fino alla 11.3 (29 marzo 2018), vedi Posso usare i lavoratori del servizio? Al contrario, i web worker avevano un supporto browser molto migliore già nel 2012: posso usare i web worker?

Se devi supportare IE11, puoi usare solo web worker: IE11 non ha service worker e apparentemente la fine del supporto per IE11 è il 14 ottobre 2025 .

Ci sono sottili differenze nel loro supporto API tra i browser, vedi HTML5 Worker Test (anche di Nolan Lawson). In un particolare browser, un tipo di worker potrebbe supportare una determinata chiamata API mentre l'altro no. Visita quella pagina e prova il tuo browser!


3
Quella tabella lo spiega molto bene. La domanda originale sarebbe probabilmente formulata meglio come "Qual è la differenza tra ..."
Drenai

1
Cosa possono fare i service worker che i web worker condivisi non possono fare?
Pacerier
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.