quinta-feira, 24 de julho de 2014

Workers em javascript

O Senhor é o meu rochedo, e o meu lugar forte, e o meu libertador; o meu Deus, a minha fortaleza, em quem confio; o meu escudo, a força da minha salvação, e o meu alto refúgio. (Salmos 18:2)

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!');
};

LINK PRO EXEMPLO
BAIXAR EXEMPLO

Nenhum comentário:

Postar um comentário