Un poco de HTML5 WebWorkers

Esta misma mañana nos referíamos a HTML5 y el soporte que los navegadores y Servidores JEE dan a alguna de sus funcionalidades más novedosas, como son los WebSockets y el COMET nativo.

En otros posts también hablamos de los WebSockets y los Server-Side Events

Incluso hemos hablado de Summer, una librería para integrar HTML5 en Spring MVC;

En este post vamos a referirnos a los Web Workers.

Los Web Workers vienen a solucionar una de las limitaciones del propio lenguaje Javascript. Javascript es un entorno single-threaded, lo que signgifica que varios scripts no pueden correr a la vez. Hasta la llegada de HTML5 los programadores usaban técnicas como el setTimeout(), setInterval() para simular la concurrencia, aunque en realidad todos los procesos corrían sobre el mismo hilo.

Con HTML5 por fin se soluciona esa limitación, la especificación Web Workers ofrece un API para correr scripts en background en aplicaciones Web. En la especificación se habla de dos tipo de Web Workers: Dedicated Workers y Shared Workers. En la práctica cuando hablamos de Web Workers estamos refiriéndonos a Dedicated Workers.

· Los Web Workers se ejecutan en un subproceso aislado

· Es necesario que el código que ejecutan se encuentre en un archivo independiente js.

· Para usarlos se crea un nuevo objeto Worker en tu página principal.

· El navegador generar un nuevo subproceso de Worker que descargará la librería de forma asíncrona.

· Una vez el archivo se haya descargado completamente se ejecutará.

· Después de crear el Worker para usarlo es necesario ejecutarlo invocando al método postMessage():

· El método postMessage también se le pueden pasar parámetros de esta forma:

· Existen dos formas de detener un Worker: ejecutando worker.terminate() desde la página principal o ejecutando self.close() dentro del propio Worker.

· Desde dentro de un Worker se pueden importar bibliotecas con la función importScripts

· Los Workers pueden crear Subworkers

· Con la función BlobBuilder se puede crear un Worker en la propia página sin tener un .js:

Si queréis profundizar más podéis seguir aquí.

Deja un comentario