Web Workers API

Los Web Workers hacen posible ejecutar la operaci贸n de un script en un hilo en segundo plano separado de la ejecuci贸n el hilo principal de la aplicaci贸n web. La ventaja de esto es que un proceso laborioso puede actuar en un hilo separado, permitiendo al hilo principal (normlamente la UI) ejecutarse sin ser bloqueado o ralentizado.

Web Workers conceptos y uso

Un worker es un objeto que se crea a trav茅s del constructor ( Worker()) este ejecuta un archivo javascript 鈥 este fichero contiene los scripts que se van a ejecutan en el hilo del worker; los workers se ejecutan en un contexto global diferente al actual del navegador window. Este contexto est谩 representado por el objeto DedicatedWorkerGlobalScope en el caso de los workers dedicados (los workers standard utilizan un solo script; y los shared workers usan SharedWorkerGlobalScope).

Podemos ejecutar los script que necesitemos dentro del hilo del worker, pero con algunas excepciones. Por ejemplo no se puede manipular directamente el DOM, ni usar algunos m茅todos y propiedades por defecto del objeto window. Pero puede usar un gran n煤mero de elementos que est谩n dentro de window, incluyendo WebSockets, y data storage formas de almacenamiento como IndexedDB y solo en Firefox OS Data Store API.  Mira Funciones y clases disponibles para workers para saber m谩s.

Los datos se comunican entre los workers y el hilo principal a trav茅s de un sistema de mensajes 鈥 tanto del hilo principal como del worker para enviar un mensaje se invoca al m茅todo postMessage() , y a trav茅s del listener del evento onmessage se pueden escuchar los mensajes (El mensaje est谩 dentro de la propiedad data del evento) . Los datos se copian en lugar de compartirse.

Los workers tambi茅n pueden generar nuevos workers, siempre que los workers est茅n en la misma p谩gina que el principal.  Adem谩s, los workers pueden usar XMLHttpRequest para la network I/O, con la excepci贸n de que los atributos responseXML y channel de XMLHttpRequest siempre retornan valor null.

Ademas de los workers dedicados, hay otro tipo de workers:

  • Los Shared workers son workers que pueden ser utilizados por multiples scripts corriendo en diferenes ventanas, IFrames, etc., esto siempre que est茅n en el mismo dominio que el worker. Son un poco m谩s complejos que los workers dedicados鈥 los scripts deben comunicarse a trav茅s de un puerto activo. Mira SharedWorker para mas detalles.
  • ServiceWorkers esencialmente actuan como servidores proxy que se ubican entre las aplicaciones web, el navegador y la red (cuando est谩n disponibles). Est谩n destinados (entre otras cosas) para poder manejar experiencias y comportamientos offline, interceptando peticiones de red y tomando la acci贸n apropiada tomando en cuenta si la conexi贸n est谩 disponible y actualizando los assets desde el servidor. Tambi茅n notificaciones push y sincronizaci贸n desde la API en segundo plano.
  • Chrome Workers es un worker solo de Firefox puedes utilizar si est谩s desarrollando complementos se puede tener acceso a js-ctypes en el worker. Mira ChromeWorker para mas detalles. 
  • Audio Workers nos dan la capacidad de procesar audio directamente dentro del contexto del worker.

Note: Seg煤n el Web workers Spec, los errores del worker no deber铆an bubujear (mira error 1188141. Esto est谩 implementado en Firefox 42.

Web Worker interfaces

AbstractWorker
Abstrae todas las propiedades y m茅todos comunes a toda clase de workers (i.e. Worker or SharedWorker).
Worker
Representa el hilo del worker en ejecuci贸n, pudiendo pasar mensajes a este.
WorkerLocation
Define la ruta absoluta del script que ejecuta el Worker.
SharedWorker
Representa un tipo de worker al que se puede acceder desde distintos contextos de navegaci贸n, tanto de varias ventanas, iframes, y otros workers.
WorkerGlobalScope
Representa el 谩mbito gen茅rico de cualquier worker (similar a  Window en un contenido web normal). Los diferentes tipos de workers tienen objetos de 谩mbito que heredan de esta interfaz y a帽ade caracter铆sticas m谩s espec铆ficas.
DedicatedWorkerGlobalScope
Representa el 谩mbito de un worker dedicado, hereda de WorkerGlobalScope y a帽ade algunas caracter铆sticas.
SharedWorkerGlobalScope
Representa el 谩mbito de un shared worke, hereda de WorkerGlobalScope y a帽ade algunas caracter铆sticas.
WorkerNavigator
Representa la identidad y estado del user agent (El cliente):

Examples

Hemos creado un par de demostraciones para ver su uso b谩sico:

You can find out more information on how these demos work in Using web workers.

Especificaciones

Specification Status Comment
HTML Living Standard Living Standard

Browser compatibility

We're converting our compatibility data into a machine-readable JSON format. This compatibility table still uses the old format, because we haven't yet converted the data it contains. Find out how you can help!
Caracter铆stica Chrome Edge Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
soporte b谩sico 4 (Yes) 3.5 (1.9.1) 10.0 10.6 4
Shared workers 4 Sin soporte 29 (29) Sin soporte 10.6 4
Paso de datos usando structured cloning 13 (Yes) 8 (8) 10.0 11.5 6
Paso de datos usando transferable objects 17 webkit
21
Sin soporte 18 (18) Sin soporte 15 6
Global URL 10[1]
23
(Yes) 21 (21) 11 15 6[1]
Caracter铆stica Android Chrome for Android Edge Firefox Mobile (Gecko) Firefox OS (Gecko) IE Phone Opera Mobile Safari Mobile
Soporte b谩sico 4.4 4 (Yes) 1.0 (1.9.1) 1.0.1 10.0 11.5 5.1
Shared workers Sin soporte 4 Sin soporte 29 1.4 Sin soporte Sin soporte Sin soporte
Pasando datos usando structured cloning Sin soporte 4 (Yes) 8 1.0.1 Sin soporte Sin soporte Sin soporte
Pasando datos usando transferable objects Sin soporte Sin soporte Sin soporte 18 1.0.1 Sin soporte Sin soporte Sin soporte

[1] As webkitURL.

See also