Respuestas:
Hay una gran diferencia en lo que están destinados a:
Trabajadores web
Los Web Workers proporcionan un medio sencillo para que el contenido web ejecute scripts en subprocesos en segundo plano. El hilo de trabajo puede realizar tareas sin interferir con la interfaz de usuario. Además, pueden realizar E / S usando XMLHttpRequest (aunque los atributos responseXML y channel son siempre nulos). Una vez creado, un trabajador puede enviar mensajes al código JavaScript que lo creó publicando mensajes en un controlador de eventos especificado por ese código (y viceversa).
Fuente: uso de trabajadores web
Trabajador del servicio
Los trabajadores de servicios actúan esencialmente como servidores proxy que se ubican entre las aplicaciones web y el navegador y la red (cuando están disponibles). Están destinados a (entre otras cosas) permitir la creación de experiencias fuera de línea efectivas, interceptando las solicitudes de red y tomando las medidas adecuadas en función de si la red está disponible y los activos actualizados residen en el servidor. También permitirán el acceso a notificaciones push y API de sincronización en segundo plano.
Por lo tanto, los Web Workers son útiles para ejecutar scripts costosos sin que la interfaz de usuario se congele, mientras que los Service Workers son útiles para modificar la respuesta de las solicitudes de red (por ejemplo, al crear una aplicación fuera de línea).
La respuesta de Buksy es correcta pero, en mi opinión, no responde a la pregunta original, a saber: "¿Qué pueden hacer los trabajadores de servicios que no puedan hacer los trabajadores web? ¿O viceversa?"
Existen diferencias fundamentales en su ciclo de vida y en la cantidad de instancias por origen que puede tener. En breve:
| Web Workers | Service Workers |
|--------------|--------------|------------------|
| Instances | Many per tab | One for all tabs |
| Lifespan | Same as tab | Independent |
| Intended use | Parallelism | Offline support |
La respuesta de Buksy es básicamente la última fila de la tabla. Crédito: Tomé esta tabla de Desmitificación de trabajadores web y trabajadores de servicios de Nolan Lawson, a partir de la diapositiva 35 .
En particular, así es como se genera y finaliza a los trabajadores web:
Considerando que los trabajadores de servicios tienen su propio ciclo de vida, que es sin duda su "parte más complicada":
El ciclo de vida del trabajador de servicios
Entonces, el ciclo de vida es una diferencia fundamental entre los dos (una consecuencia de su uso previsto).
Solía haber una gran diferencia en la compatibilidad del navegador : los trabajadores de servicio no estaban disponibles en Safari para iOS hasta la 11.3 (29 de marzo de 2018), consulte ¿Puedo usar trabajadores de servicio? Por el contrario, los trabajadores web ya tenían un soporte de navegador mucho mejor en 2012: ¿Puedo usar trabajadores web?
Si tiene que admitir IE11, solo puede usar trabajadores web: IE11 no tiene trabajadores de servicio, y aparentemente el final del soporte para IE11 es el 14 de octubre de 2025 .
Existen diferencias sutiles en su compatibilidad con API entre los navegadores, consulte Prueba de trabajo de HTML5 (también de Nolan Lawson). En un navegador en particular, un tipo de trabajador podría admitir una determinada llamada a la API, mientras que el otro no. ¡Visite esa página y pruebe su propio navegador!