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 uma thread diferente da thread principal da aplicação Web. Permitindo que cálculos laboriosos sejam processados sem que ocorra bloqueio da thread principal (geralmente associado à 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 qualquer 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 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 (a mensagem está contida no atributo data do evento Message). É importante ressaltar que os dados são copiados, e não compartilhados.

Workers podem, por sua vez, gerar novos workers, desde que esses workers sejam hospedados na mesma origem que a página principal. Além disso, workers podem usar XMLHttpRequest para network I/O, com a exceção de que os atributos responseXMLchannel do XMLHttpRequest sempre retornam nulo.

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

  • Shared Workers 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 essencialmente atuam como servidores proxy enquadram entre aplicativos da web e o navegador e a rede (quando disponível). Eles destinam-se (entre outras coisas) a habilitar a criação de experiências off-line efetivas, interceptando solicitações de rede e tomando as ações adequadas com base na disponibilidade da rede e atualização de ativos no servidor. Eles também permitirão o acesso a notificações push e APIs de sincronização em background.
  • Chrome Workers são um Firefox-only tipo de worker que você pode usar caso esteja desenvolvendo um add-ons e quer usar workers em extensão e ter acesso a js-ctypes na sua worker. Veja ChromeWorker para mais detalhes. 
  • Audio Workers fornecem a capacidade de processamento de áudio direcionado direto para ser feito dentro do contexto de um web worker.

Interfaces Web Worker

AbstractWorker
Propriedades Abstratas e métodos comuns a todos tipos de workers (i.e. Worker ou SharedWorker).
Worker
Representa a worker thread em execução, permitindo que você passe mensagens para o código em execução.
SharedWorker
Representa um tipo específico de worker que pode ser acessado a partir de vários contextos de navegação, sendo várias janelas, iframes ou mesmo workers.
WorkerGlobalScope
Representa o escopo genérico de qualquer worker (fazendo o mesmo trabalho como Window para conteúdo normal da web). Diferentes tipos de workers têm objetos de escopo que herdam desta interface e adicionam recursos mais específicos.
DedicatedWorkerGlobalScope
Representa o escopo de um dedicated worker, herdado de WorkerGlobalScope e adicionam recursos mais específicos.
SharedWorkerGlobalScope
Representa o escopo de um shared worker, herdado de WorkerGlobalScope e adicionam recursos mais específicos.
WorkerNavigator
Representa a identidade e estado do user agent (o cliente):

Exemplos

Criamos algumas demonstrações simples para mostrar o uso básico:

Você pode descobrir mais informações sobre como essas demonstrações funcionam em Usando web workers.

Especificações

Especificação Status Comentário
HTML Living Standard Padrão em tempo real No change from Unknown.
Unknown Desconhecido Initial definition.

Compatibilidade do navegador

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!

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][2] Como em webkitURL.

Veja também

Etiquetas do documento e colaboradores

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