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

Resuelto Ben Aston asked hace 8 años • 3 respuestas

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

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

Ben Aston avatar Jul 28 '16 16:07 Ben Aston
Aceptado

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 los trabajadores web no puedan hacer? ¿O viceversa?".

Existen diferencias fundamentales en su ciclo de vida y 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 Desmitificando a los trabajadores web y a los trabajadores de servicios de Nolan Lawson, a partir de la diapositiva 35 .

En particular, así es como se generan y eliminan trabajadores web:

Usando trabajadores web

Considerando que los trabajadores de servicios tienen su propio ciclo de vida, que sin duda es 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 del 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 versión 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 utilizar trabajadores web?

Si tiene que admitir IE11, solo puede usar trabajadores web: IE11 no tiene trabajadores de servicio y aparentemente el fin del soporte para IE11 es el 14 de octubre de 2025 .

Existen diferencias sutiles en la compatibilidad con API entre navegadores; consulte HTML5 Worker Test (también de Nolan Lawson). En un navegador concreto, un tipo de trabajador puede admitir una determinada llamada API mientras que el otro no. ¡Visite esa página y pruebe su propio navegador!

Ali avatar Sep 10 '2018 10:09 Ali

Hay una gran diferencia en su finalidad:

Trabajadores web

Web Workers proporciona 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 utilizando XMLHttpRequest (aunque los atributos de canal y XML de respuesta siempre son 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, el navegador y la red (cuando estén disponibles). Su objetivo es (entre otras cosas) permitir la creación de experiencias fuera de línea efectivas, interceptar solicitudes de red y tomar las medidas adecuadas en función de si la red está disponible y si los activos actualizados residen en el servidor. También permitirán el acceso a notificaciones automáticas y API de sincronización en segundo plano.

Fuente: API de trabajador de servicio

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 avatar Jul 28 '2016 10:07 Buksy

Trabajadores de servicios

ingrese la descripción de la imagen aquí

Los trabajadores de servicios son un proxy entre el navegador y la red. Al interceptar las solicitudes realizadas por el documento, los trabajadores del servicio pueden redirigir las solicitudes a un caché, lo que permite el acceso sin conexión.

/* main.js */

navigator.serviceWorker.register('/service-worker.js');



/* service-worker.js */

// Install 
self.addEventListener('install', function(event) {
    // ...
});

// Activate 
self.addEventListener('activate', function(event) {
    // ...
});

// Listen for network requests from the main document
self.addEventListener('fetch', function(event) {
    // ...
});
Expandir fragmento

trabajadores web

ingrese la descripción de la imagen aquí

Los trabajadores web son scripts de propósito general que nos permiten descargar el trabajo intensivo del procesador desde el hilo principal.

/* main.js */

// Create worker
const myWorker = new Worker('worker.js');

// Send message to worker
myWorker.postMessage('Hello!');

// Receive message from worker
myWorker.onmessage = function(e) {
  console.log(e.data);
}
Expandir fragmento

Publicación original aquí

sanket naik avatar Dec 11 '2020 06:12 sanket naik