English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

HTML5 Web Workers

Web Workers são JavaScript executados em background, sem afetar o desempenho da página.

O que é Web Worker?

Quando o script é executado na página HTML, o estado da página é irreponível até que o script seja concluído.

Web Workers são JavaScript executados em background, independentes de outros scripts, e não afetam o desempenho da página. Você pode continuar a fazer o que quiser: clicar, selecionar conteúdo, etc., enquanto o web worker executa no background.

Suporte do navegador

Internet Explorer 10, Firefox, Chrome, Safari e Opera suportam Web workers.

HTML5 Exemplo de Web Workers

O exemplo a seguir cria um web worker simples que conta no background:

Exemplo Online

Contagem:


demo-Código do arquivo "workers.js":

var i=0;
function timerCount()
{
i=i+1;
postMessage(i);
setTimeout("timerCount()",500);
}
timerCount();

Verificar se o navegador suporta Web Worker

Antes de criar o web worker, verifique se o navegador do usuário suporta ele:

if(typeof(Worker)!=="undefined")
{
    // Sim! O Web worker é suportado!
    // alguns códigos.....
}
else
{
    //Desculpe! O Web Worker não é suportado
}

Criar arquivo web worker

Agora, vamos criar nosso web worker em um JavaScript externo.

Aqui, criamos o script de contagem. O script está armazenado em "demo"-no arquivo "workers.js":

var i=0;
function timerCount()
{
    i=i+1;
    postMessage(i);
    setTimeout("timerCount()",500);
}
timerCount();

A parte importante do código acima é o método postMessage() - Ele é usado para enviar uma mensagem de volta para a página HTML.

Atenção: O web worker geralmente não é usado para scripts tão simples, mas para tarefas que consomem mais recursos de CPU.

Criar objeto Web Worker

Já temos o arquivo web worker, agora precisamos chamá-lo da página HTML.

O código a seguir verifica se existe worker, se não existir,- Ele cria um novo objeto web worker, e então executa "demo"-workers.js" no código:}

if(typeof(w) == "undefined")
{
    w = new Worker("demo-workers.js");
}

Depois disso, podemos enviar e receber mensagens do web worker.

Adicione um ouvinte de evento "onmessage" ao web worker:

w.onmessage = function(event){
    document.getElementById("result").innerHTML = event.data;
};

Quando o web worker passa uma mensagem, o código no ouvinte de eventos é executado. event.data contém os dados do event.data.

Encerrar Web Worker

Depois de criarmos o objeto web worker, ele continuará a ouvir mensagens (mesmo após o script externo ser concluído) até que seja encerrado.

Para encerrar o web worker e liberar o navegador/Para usar recursos da máquina, use o método terminate():

w.terminate();

Código completo do exemplo Web Worker

Já vimos o código do Worker no arquivo .js. Abaixo está o código da página HTML:

<!DOCTYPE html>
<html>
<head> 
<meta charset="utf-8"> 
<title>Site de Tutoriais Básicos(oldtoolbag.com)</title> 
</head>
<body>
 
<p>Contagem: <output id="result"></output></p>
<button onclick="startWorker()">Iniciar trabalho</button> 
<button onclick="stopWorker()">Parar trabalho</button>
 
<p><strong>Atenção:</<strong>Internet Explorer 9 e versões mais antigas do navegador Internet Explorer não suportam Web Workers.</p>
 
<script>
var w; 
function startWorker() {
    if(typeof(Worker) !== "undefined") {
        if(typeof(w) == "undefined") {
            w = new Worker("demo-workers.js");
        }
        w.onmessage = function(event) {
            document.getElementById("result").innerHTML = event.data;
        };
    } else {
        document.getElementById("result").innerHTML = "Desculpe, seu navegador não suporta Web Workers...";
    }
}
 
function stopWorker() 
{ 
    w.terminate();
    w = undefined;
}
</script>
 
</body>
</html>
Teste e Veja ‹/›

Web Workers e DOM

Devido ao fato de que os Web Workers estão em arquivos externos, eles não podem acessar os seguintes objetos JavaScript:

  • Objeto Window

  • Objeto Document

  • Objeto Parent