¿Qué pueden hacer los trabajadores de servicios que los trabajadores web no puedan?

109

¿Qué pueden hacer los trabajadores de servicios que los trabajadores web no puedan? ¿O viceversa?

Parece que los trabajadores web son un subconjunto de la funcionalidad de los trabajadores de servicios. ¿Es esto correcto?

Ben Aston
fuente

Respuestas:

140

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.

Fuente: API de Service Worker

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).

Buksy
fuente
1
¿Qué pueden hacer los trabajadores de servicios que los trabajadores web no puedan?
Pacerier
1
@Pacerier leyó la segunda cita y el último párrafo para responder a su pregunta
Buksy
Estoy de acuerdo con Pacerier en que esto no responde a la pregunta. Solo digo lo que hace uno y lo que hace el otro. Un lector puede llegar a una conclusión basada en ella, pero una buena respuesta debería aclarar, tal vez incluso confirmar o refutar la conclusión del lector.
kicia
Me gusta la otra respuesta que ha proporcionado Ali, es una descripción más amplia de las diferencias entre esos dos técnicos. Pero creo que el último párrafo de mi respuesta responde claramente a la pregunta, los Web Workers pueden ayudarlo a crear la aplicación sin conexión . Si cree que hay una respuesta mejor, no dude en agregar otra :)
Buksy
1
@Buksy, un error tipográfico en su comentario: el [[Servicio]] Los trabajadores le puede ayudar a construir la línea de aplicaciones
Ahmad Mobaraki
143

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:

Usar 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!

Ali
fuente
3
Esa tabla lo explica muy bien. La pregunta original probablemente estaría mejor redactada como "¿Cuál es la diferencia entre ..."
Drenai
1
¿Qué pueden hacer los trabajadores de servicios que los trabajadores web compartidos no puedan?
Pacerier