MDN wants to learn about developers like you: https://qsurvey.mozilla.com/s3/MDN-dev-survey

Esta tradução está incompleta. Por favor, ajude a traduzir este artigo.

Web Workers são mecanismos que permitem que  uma  operação de um dado script seja executado em um thread diferente do thread principal da aplicação Web.  Permitindo que cálculos laboriosos sejam processados sem que ocorra bloqueio do thread principal(geralmente associado com a interface).

 

Web Workers: conceitos e uso

Um "worker" é um objeto criado através da utilização do construtor (ex Worker()) que executa um dado arquivo Javascript —  o código contido em tal arquivo é executado no thread do worker; e tais workers são executados em um contexto diferente do principal window. O contexto dos workers é representado pelo objeto DedicatedWorkerGlobalScope no caso de workers dedicados (workers padrões são utilizados por um único script; workers compartilahdos utilizam SharedWorkerGlobalScope).

O thread do worker roda qulaquer trecho de código, mas é importante ressaltar que esse trecho  não poderá manipular o DOM, ou usar alguns métodos e propriedades  do objeto  window. Mas,  é permitido usar um grande número de itens fornecidos pelo objeto window, incluindo  WebSockets, mecanismos de data storage tais como IndexedDB  Firefox OS-only Data Store API. Para mais detalhes veja  Funções e classes disponíveis para os workers.

O thread principal e os threads dos workers comunicam-se entre si através enviando dados  através do sistema de mensagens — ambos os lados enviam mensagens usando o método postMessage(), e respondem as mensagens via o manipulador de eventos onmessage (the message is contained within the Message event's data attribute.)  É importante ressaltar que os dados são copiados, e  não compartilhados.

Workers may in turn spawn new workers, as long as those workers are hosted within the same origin as the parent page.  In addition, workers may use XMLHttpRequest for network I/O, with the exception that the responseXML and channel attributes on XMLHttpRequest always return null.

Além dos workers dedicados, existem outros tipos de workers:

  • Workers compartilhados são workers que podem ser utilizados por diversos scripts que estão sendo executados em diferentes janelas, IFrames, etc., desde que eles estejam no mesmo domínio. Eles são ligeiramente mais complexos que workers dedicados — os scripts se comunicam através de uma porta ativa. Veja SharedWorker para mais detalhes.
  • ServiceWorkers essentially act as proxy servers that sit between web applications, and the browser and network (when available). They are intended to (amongst other things) enable the creation of effective offline experiences, intercepting network requests and taking appropriate action based on whether the network is available and updated assets reside on the server. They will also allow access to push notifications and background sync APIs.
  • Chrome Workers are a Firefox-only type of worker that you can use if you are developing add-ons and want to use workers in extensions and have access to js-ctypes in your worker. See ChromeWorker for more details. 
  • Audio Workers provide the ability for direct scripted audio processing to be done inside a web worker context.

Web Worker interfaces

AbstractWorker
Abstracts properties and methods common to all kind of workers (i.e. Worker or SharedWorker).
Worker
Represents a running worker thread, allowing you to pass messages to the running worker code.
SharedWorker
Represents a specific kind of worker that can be accessed from several browsing contexts, being several windows, iframes or even workers.
WorkerGlobalScope
Represents the generic scope of any worker (doing the same job as Window does for normal web content). Different types of worker have scope objects that inherit from this interface and add more specific features.
DedicatedWorkerGlobalScope
Represents the scope of a dedicated worker, inheriting from WorkerGlobalScope and adding some dedicated features.
SharedWorkerGlobalScope
Represents the scope of a shared worker, inheriting from WorkerGlobalScope and adding some dedicated features.
WorkerNavigator
Represents the identity and state of the user agent (the client):

Examples

We have created a couple of simple demos to show basic usage:

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

Specifications

Specification Status Comment
WHATWG HTML Living Standard Living Standard No change from Web Workers.
Web Workers Editor's Draft Initial definition.

Browser compatibility

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Basic support 4 3.5 (1.9.1) 10.0 10.6 4
Shared workers 4 29 (29) Não suportado 10.6 4
Passing data using structured cloning 13 8 (8) 10.0 11.5 6
Passing data using  transferable objects 17 webkit
21
18 (18) Não suportado 15 6
Global URL 10 [1]
23
21 (21) 11 15 6 [2]
Feature Android Chrome Mobile Firefox Mobile (Gecko) Firefox OS (Gecko) IE Phone Opera Mobile Safari Mobile
Basic support 4.4 4 3.5 (1.9.1) 1.0.1 10.0 11.5 5.1
Shared workers Não suportado 4 29 1.4 Não suportado Não suportado Não suportado
Passing data using structured cloning Não suportado 4 8 1.0.1 Não suportado Não suportado Não suportado
Passing data using  transferable objects Não suportado Não suportado 18 1.0.1 Não suportado Não suportado Não suportado

[1] As webkitURL.

[2] As webkitURL.

 

See also

Etiquetas do documento e colaboradores

 Colaboradores desta página: leonardosnt, devmessias
 Última atualização por: leonardosnt,