O que os service workers podem fazer que os web workers não podem?

109

O que os service workers podem fazer que os web workers não podem? Ou vice-versa?

Parece que os web workers são um subconjunto da funcionalidade dos service workers. Isso está correto?

Ben Aston
fonte

Respostas:

140

Há uma grande diferença no que eles se destinam:

Trabalhadores da Web

Os Web Workers fornecem um meio simples para o conteúdo da web executar scripts em threads de fundo. O thread de trabalho pode executar tarefas sem interferir na interface do usuário. Além disso, eles podem realizar E / S usando XMLHttpRequest (embora os atributos responseXML e channel sejam sempre nulos). Depois de criado, um trabalhador pode enviar mensagens para o código JavaScript que o criou, postando mensagens para um manipulador de eventos especificado por esse código (e vice-versa).

Fonte - Usando Web Workers

Service Worker

Os service workers atuam essencialmente como servidores proxy que ficam entre os aplicativos da web, o navegador e a rede (quando disponível). Eles se destinam (entre outras coisas) a permitir a criação de experiências offline eficazes, interceptando solicitações de rede e tomando as medidas adequadas com base na disponibilidade da rede e de ativos atualizados residem no servidor. Eles também permitirão acesso a notificações push e APIs de sincronização em segundo plano.

Fonte - API Service Worker

Portanto, os Web Workers são úteis para executar scripts caros sem fazer com que a interface do usuário congele, enquanto os Service Workers são úteis para modificar a resposta de solicitações de rede (por exemplo, ao construir um aplicativo offline).

Buksy
fonte
1
O que os service workers podem fazer que os web workers não podem?
Pacerier
1
@Pacerier leu a segunda citação e o último parágrafo para responder à sua pergunta
Buksy
Concordo com Pacerier que isso não responde à pergunta. Eu apenas conto o que um faz e o que o outro. Um leitor pode chegar a uma conclusão com base nisso, mas uma boa resposta deve esclarecer, talvez até mesmo confirmar ou refutar uma conclusão do leitor.
kicia
Eu gosto da outra resposta que Ali deu, é uma descrição mais ampla das diferenças entre esses dois técnicos. Mas acho que o último parágrafo da minha resposta responde claramente à pergunta: os Web Workers podem ajudá-lo a construir o aplicativo offline . Se você acha que existe uma resposta melhor, sinta-se à vontade para adicionar outra :)
Buksy
1
@Buksy, Um erro de digitação em seu comentário: the [[Service]] Workers pode ajudá-lo a construir o aplicativo offline
Ahmad Mobaraki
143

A resposta de Buksy está correta, mas na minha opinião não responde à pergunta original, a saber: "O que os service workers podem fazer que os web workers não podem? Ou vice-versa?"

Existem diferenças fundamentais em seu ciclo de vida e no número de instâncias por origem que você pode ter. Em resumo:

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

A resposta de Buksy é basicamente a última linha da tabela. Crédito: Peguei esta tabela de Demystifying Web Workers and Service Workers de Nolan Lawson, começando no slide 35 .

Em particular, aqui está como você gera e encerra web workers:

Usando Web Workers

enquanto os prestadores de serviço têm seu próprio ciclo de vida, que é reconhecidamente sua "parte mais complicada":

O Ciclo de Vida do Service Worker

Portanto, o estilo de vida é uma diferença fundamental entre os dois (uma consequência do uso pretendido).

Costumava haver uma grande diferença no suporte do navegador : Service workers não estavam disponíveis no Safari para iOS até 11.3 (2018, 29 de março), consulte Posso usar service workers? Em contraste, os web workers tiveram um suporte a navegador muito melhor já em 2012: Posso usar web workers?

Se você tiver que oferecer suporte ao IE11, poderá usar apenas Web workers: o IE11 não tem service workers e, aparentemente, o fim do suporte para o IE11 é 14 de outubro de 2025 .

Existem diferenças sutis no suporte de API entre os navegadores, consulte HTML5 Worker Test (também de Nolan Lawson). Em um navegador específico, um tipo de trabalhador pode oferecer suporte a uma determinada chamada de API, enquanto o outro não. Visite essa página e teste seu próprio navegador!

Todos
fonte
3
Essa tabela explica muito bem. A pergunta original provavelmente seria melhor formulada como "Qual é a diferença entre ..."
Drenai,
1
O que os service workers podem fazer que os web workers compartilhados não podem?
Pacerier