Web Workers
Una de las características de HTML 5 introducidas en el reciente Firefox 3.5 y que también se encuentra disponible en Safari 4 y Chrome 2 son los web workers.
Los workers proveen un mecanismo para poder ejecutar tareas que requieran mucho tiempo de ejecución en hilos directamente en el sistema operativo sin que bloqueen la interfaz del usuario. Una de sus utilidades principales es la de ejecutar tareas de entrada/salida de datos a través del objeto XMLHttpRequest.
Los web workers se comunican con el proceso principal a través del envío de mensajes a un manejador de eventos especificado por el desarrollador. Estos mensajes pueden contener desde una cadena de caracteres a un objeto complejo. Una característica importante es que no pueden manipular el DOM por lo que si se desea mostrar los datos resultantes de su ejecución es necesarios que estos sean pasados al manejador a través del paso de mensajes.
Para crear un worker lo único que es necesario es llamar al contructor pasándole como único argumento la URI del script que deberá ejecutar, y definir el manejador del evento onmessage que será el encargado de escribir el resultado en la página.
var worker = new Worker('worker.js');
worker.onmessage = function(event) {
print("¡llamada ejecutada al finalizar el worker!\n");
}
y para detener su ejecución:
worker.terminate();
Posteriormente deberemos implementar lo que hará el worker durante su ejecución en el archivo worker.js de la siguiente manera:
onmessage = function(event) {
var n = calcular();
postMessage(n);
}
Al finalizar la ejecución del método calcular el worker enviará un mensaje con el resultado que será recogido por el manejador del evento onmessage definido anteriormente.
El método calcular podría estar definido en otro archivo e importando mediante la función global importScripts('calcular.js') la cuál descagará y traerá dicha función al ámbito del worker.
Además cada worker puede lanzar tantos otros workers como se desee, lo único a tener en cuenta es que la ruta a el fichero que se le pasa en el constructor se calcula dinámicamente dependiendo de la localización del padre. Esto es muy aconsejable sobre todo en el caso de que el usuario posea un microprocesador con más de un núcleo, ya que el sistema operativo podría repartir los hilos entre estos.