3 de abril de 2010

Web Workers - Qué son y para que sirven

Con la llegada de HTML5 llegan nuevas funcionalidades a los navegadores web, es el caso del Storage (almacenamiento en el cliente), Geolocation (geolocalización) o los Web Workers (ejecución de scripts en procesos en segundo plano).

En éste artículo vamos a ver que son y para que sirven los Web Workers (de ahora en adelante los llamaremos Workers).

Los Workers no son más que una API que permite a los desarrolladores web ejecutar procesos en segundo plano, son totalmente independientemene a los procesos de la interfaz de usuario.

Esto permite que las secuencias de comandos de larga duración no se vean interrumpidas por secuencias de comandos que responden a clicks u otras interacciones por parte del usuario, y de esta manera permite ejecutar tareas de larga duración sin necesidad de interrumpir la respuesta del usuario.

Los Workers son relativamente gruesos y resistentes, y no están destinados a ser utilizados en grandes cantidades. Por ejemplo, no sería apropiado para lanzar un Worker por cada píxel de una imagen de cuatro megapíxeles.

En general, los Workers se espera que sean de larga duración, tienen un alto costo inicial de rendimiento, y un alto costo por ejemplo la memoria.

Un simple ejemplo del uso de Workers sería el siguiente, un programa que calcula el mayor numero primo:

example01.html

<!DOCTYPE HTML>
<html>
<head>
<title>Worker example: One-core computation</title>
</head>
<body>
<p>The highest prime number discovered so far is: <output id="result"></output></p>
<script>
var worker = new Worker('worker.js');
worker.onmessage = function (event) {
document.getElementById('result').textContent = event.data;
};
</script>
</body>
</html>


worker.js

var n = 1;
search: while (true) {
n += 1;
for (var i = 2; i <= Math.sqrt(n); i += 1)
if (n % i == 0)
continue search;
// found a prime!
postMessage(n);
}


La definición de un Worker se realiza mediante la instancia de la clase Worker, como argumento de la clase se indica el nombre del script a cargar (o los scripts, separados por comas, en caso de ser más de uno).

Una vez instanciada la clase, se debe definir el proceso a realizar cuando recibe un mensaje por parte del script que esta ejecutandose en segundo plano, para ello, el objeto cuenta con el método onmessage, al que se debe pasar una función.

La segunda parte, donde escribimos el código del script a ejecutar en segundo plano, no es más que un simple script, la único nuevo que se le añade es la función postMessage, esta función es la utilizada para realizar la comunicación con el Worker, la función envía la información necesaria al primer proceso, y ésta puede ser usada desde el primer proceso.

Hasta aquí esta breve introducción al uso de Workers. Para más información leer los siguientes enlaces:

http://www.whatwg.org/specs/web-workers/current-work/
https://developer.mozilla.org/En/Using_web_workers

No hay comentarios:

Publicar un comentario