--- title: Web Workers API slug: Web/API/Web_Workers_API translation_of: Web/API/Web_Workers_API ---
{{DefaultAPISidebar("Web Workers API")}}
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).
Um "worker" é um objeto criado através da utilização do construtor (ex {{domxref("Worker.Worker", "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 {{domxref("window")}}. O contexto dos workers é representado pelo objeto {{domxref("DedicatedWorkerGlobalScope")}} no caso de workers dedicados (workers padrões são utilizados por um único script; workers compartilhados utilizam {{domxref("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 {{domxref("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 {{event("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 responseXML
e channel
do XMLHttpRequest
sempre retornam nulo.
Além dos workers dedicados, existem outros tipos de workers:
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ção | Status | Comentário |
---|---|---|
{{SpecName('HTML WHATWG', '#toc-workers')}} | {{Spec2('HTML WHATWG')}} | No change from {{SpecName("Web Workers")}}. |
{{SpecName('Web Workers')}} | {{Spec2('Web Workers')}} | Initial definition. |
Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari (WebKit) |
---|---|---|---|---|---|
Basic support | 4 | {{CompatGeckoDesktop(1.9.1)}} | 10.0 | 10.6 | 4 |
Shared workers | 4 | {{CompatGeckoDesktop(29)}} | {{CompatNo}} | 10.6 | 4 |
Passing data using structured cloning | 13 | {{CompatGeckoDesktop(8)}} | 10.0 | 11.5 | 6 |
Passing data using transferable objects | 17 {{ property_prefix("webkit") }} 21 |
{{CompatGeckoDesktop(18)}} | {{CompatNo}} | 15 | 6 |
Global {{ domxref("window.URL", "URL") }} | 10 [1] 23 |
{{CompatGeckoDesktop(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 | {{CompatGeckoDesktop(1.9.1)}} | 1.0.1 | 10.0 | 11.5 | 5.1 |
Shared workers | {{CompatNo}} | 4 | 29 | 1.4 | {{CompatNo}} | {{CompatNo}} | {{CompatNo}} |
Passing data using structured cloning | {{CompatNo}} | 4 | 8 | 1.0.1 | {{CompatNo}} | {{CompatNo}} | {{CompatNo}} |
Passing data using transferable objects | {{CompatNo}} | {{CompatNo}} | 18 | 1.0.1 | {{CompatNo}} | {{CompatNo}} | {{CompatNo}} |
[1][2] Como em webkitURL
.