Middle
O que são web workers e para que servem?
sobes.tech IA
Resposta da IA
Os web workers são uma forma de executar código JavaScript em um thread de fundo, separado do thread principal da interface do utilizador do navegador.
Objetivo:
- Executar cálculos intensivos em recursos sem bloquear o thread principal, evitando que a interface congele.
- Processar grandes volumes de dados ou realizar operações longas (por exemplo, parsing, compressão, requisições de rede em alguns casos) em segundo plano.
- Melhorar o desempenho e a capacidade de resposta das aplicações web.
Tipos de web workers:
- Dedicated Worker: Associado ao script que o criou.
- Shared Worker: Pode ser partilhado entre vários scripts que executam em diferentes janelas ou abas do mesmo domínio.
- Service Worker: Intercepta requisições de rede, gere o cache, fornece acesso offline, suporta notificações push.
Exemplo de criação e uso de um Dedicated Worker:
// main.js (thread principal)
const worker = new Worker('worker.js');
// Enviar uma mensagem ao worker
worker.postMessage('Iniciar cálculos pesados');
// Receber mensagens do worker
worker.onmessage = function(event) {
console.log('Recebido do worker:', event.data);
};
// worker.js (código do worker)
self.onmessage = function(event) {
console.log('Recebido no worker:', event.data);
// Simulação de cálculos pesados
let result = 0;
for (let i = 0; i < 1000000000; i++) {
result += i;
}
// Enviar mensagem de volta ao thread principal
self.postMessage('Cálculos concluídos, resultado: ' + result);
};
Restrições:
- Sem acesso direto ao DOM.
- Não é possível usar algumas variáveis globais do thread principal (por exemplo,
window,document). - A comunicação ocorre através de troca assíncrona de mensagens (
postMessageeonmessage/addEventListener('message')). - Os dados entre threads são transferidos por cópia (algoritmo de clonagem estruturada), mas para grandes dados, pode-se usar
Transferable Objectspara transferir por referência (perdendo acesso no thread original).