Javascript Webworkers

Publicadas por Jose Carlos Tamayo

Estaba pensando en como hacer un demo de mi juego y se me ocurrio que quizas con un poco de inteligencia artificial se ponga divertida la cosa. Divertida pero un poco dificil de implementar:
Generalmente la inteligencia artificial en juegos de video es un proceso en paralelo que consume recursos computacionales (memoria ram, ciclos de reloj, el hamster que le da potencia a tu cpu,etc) de forma moderada en el mejor de los casos.

IA Desde el Servidor
La primera idea que paso fugazmente por mi mente fue que los calculos los haga el servidor como en el siguiente esquema:

Efectivamente, es un Hamster, un Hamster bien inteligente en el servidor

La Solucion seria regular a buena, con pocos usuarios funcionaria bien, pero conforme aumente el numero de jugadores, el sistema no escalaria bien. Y aun asi se comprara un servidor mejor, no existiria una solucion mejor?, ademas no hay que olvidarnos de la usabilidad y el tiempo de espera para el usuario, tengan en cuenta que los usuarios web en general son desesperados. Me pregunte entonces ¿El cliente podra correr la IA?

Inteligencia Artificial desde el cliente
Asi que me decidi a investigar un poco que se necesitaria para correr la IA en el cliente. Estamos hablando por supuesto de usar javascript para los calculos de IA. Seria quizas mas facil usar algun plugin como javafx, flash o hasta silverlight, pero hay algo en esas tecnologias que no me gustan, el tiempo de espera quizas, que se yo.

Asi que investigando un poco encontre a los fabulosos Web Workers, que me podrian ayudar a pasar el calculo de IA del servidor al cliente. Chequen el siguiente esquema:

Ahora el AI funciona dentro de cada cliente liberando de esa carga al server

Web Workers y Tu
WebWorkers es una tecnologia que te permite ejecutar codigo Javascript en forma paralela al codigo javascript de la pagina web. Recordemos que el codigo Javascript se corre en un solo hilo. John Resig habla un poco de como funciona este hilo principal con ejemplos del timers. La situacion se vuelve mas compleja en la mayoria de los navegadores ya que actualmente, con excepcion de Chrome y su sandboxing, no solo el javascript de la pagina se corre en un solo hilo, si no el javascript de todas las paginas abiertas se corre en un solo hilo.

Comparacion del hilo de Javascript en Chrome y los otros navegadores. Chrome usa varios hilos,uno por pagina, los otros navegadores usan un solo hilo para todas las paginas. El Webworkers nos ayuda a ejecutar un nuevo hilo de javascript

Si no usaramos ese hilo especial del webworker, nuestra pagina detendria todas sus acciones hasta que haya terminado de computar el codigo fuerte. Imaginate 10 segundos sin poder usar tu pagina web, ¿Nada usable verdad?

Ahora no todo es color de rosa ya que por ahora esta en la etapa de Draft por la WHATWG la comunidad que dicta los estandares sobre HTML, CSS, Javascript y esas cosillas web.

¿Que que significa Draft? Pues que pueda que esta en proceso de ser estandar. Lo bueno es que hay navegadores como Firefox3, Safari 4 y por ahi dicen que una version de pruebas de Chrome, ya tienen funcional el uso de WebWorkers.

¿Y con los demas navegadores que hariamos? Pues no todo esta perdido, Google Gear ofrece WebWorkers, con el nombre de WorkersPool, solo que tendriamos que instalar el plugin primero. Nada mal, si lo pensamos bien podriamos hacer un wrapper para usar Webworkers Nativos si existiesen o en su defecto usar GoogleGear.

¿Que les parece esta idea?. webworkers puede llegar a convertirse en una tecnologia muy poderosa, no solo para juegos si no para paginas web en general. Imaginen una pagina muy visitada, con un webworker calculando secuencias de ADN o codigo para desencriptar un password. El poder de muchas computadoras en un solo sitio.

¿Te gusta la pagina?, socializame haciendole click a tu color preferido:

Add to Technorati Favorites Digg! del.icio.us.me

2 comentarios:

  1. eversor dijo...

    Estuve leyendo sobre los webworkers y me parecio interesantisisisimo , lo que pasa es que para dexgame no le veo mucha utilidad , ya que no cargamos demasiado de javascript , tenemos lo tipico , cuentas regresivas , algunas funcionalidades que me cree para envio de flotas y tal , como el neOgame del firefox , pero lo que si le tengo que meter es mas de ajax (que he descubierto una perlita llamada xajax...) para que no haga tanta carga para cosas que realmente no necesita.

    te recomiendo que le eches un ojo a lo de xajax , te dejo el link

    http://xajaxproject.org/en/docs-tutorials/upgrading-from-xajax-0-2-x-to-0-5/#install

  2. Jose Carlos Tamayo dijo...

    Naa entre librerias de javascript mis parcializados ojos solo ven jquery XD.
    Yo en lo personal respiro y como jquery todo el dia, esta libreria de javascript tambien me hace ajax y me facilita bastante manejarme el DOM de mis paginas.

    Claro el xajax esta bien si mas que todo necesitas facilitarte la vida entre Js, AJAX y PHP. Es mas podrias usar las dos librerias ya que jquery no tiene esa facilidad para comunicarte con el PHP. Aunque con un switch case me hice algo parecido ^^.

    saludos ^^

Publicar un comentario