WebWorkers são, basicamente, "scripts trabalhadores da WEB". Basicamente, são, semelhante á qualquer outro arquivo javascript, ou seja, scripts que interagem com a página principal. Porém, há uma pequena diferença: Durante a execução de qualquer instrução, seja uma requisição ou algum tipo de processamento, a outra instrução aguarda o fim da primeira. A execução de instruções em javascript é linear e não paralela. O navegador interpreta e executa linha a linha os comandos do bloco de intruções. Por exemplo: Quando há uma requisição em andamento, o interpretador simplesmente para, até a requisição estiver concluída. Só depois, segue a execução até a próxima linha.
No caso de WebWorkers, é diferente: A página principal aciona ou manda uma mensagem para algum script worker, e o mesmo, em executa determinado processamento em paralelo. Ou seja, a página principal continua executando seu bloco de instruções sem aguardar o fim da linha anterior.
Este mecanismo funciona graças á uma eficiente troca de mensagens entre o script e a página principal: Quando a página principal aciona o script (Evento postMessage), é executado o evento onMessage() no worker, que irá retornar sua resposta á página principal através do método postaMessage(). A resposta do worker estará no atributo data, do manipulador de evento event.
O exemplo consiste em um campo, um container e um botão para enviar. Depois que você digita algo, e clique em ENVIAR, o valor digitado é enviado ao worker, que retorna uma resposta com o valor, e alguma mensagem aleatória, como se fosse um chat.
onconnect = function (event) {
var newPort = event.ports[0];
var msgs = new Array();
msgs.push("Como c ta");
msgs.push("DDDDDDDDD");
msgs.push("MMMMMMMMMMMMMMM");
newPort.postMessage("Estabelecida conexao: ");
newPort.onmessage = function (event) {
var x = Math.floor(Math.random() * (msgs.length));
var m = msgs[x];
newPort.postMessage("Recebido: " + event.data); newPort.postMessage("Enviado: " + m);
};
//newPort.postMessage('ready!');
};