Mejorar la Escalabilidad en juegos Web

Publicadas por Jose Carlos Tamayo

En el anterior post hablabamos de como el crear objetos a diestra y siniestra no sirve de mucho para sistemas web. Pero despues de todo somos humanos y no maquinas, necesitamos siempre cambiar un poco de rendimiento por facilidad de codificacion y reutilizacion. Hay que aplicar los conceptos necesarios para que una aplicacion sea escalable. Aqui 3 conceptos que pueden ayudar:

A) Cacheo minimo de variables: Tomando el ejemplo del post anterior. Lo que se debe de hacer es crear los objetos necesarios, uno por uno, usarlos y despues eliminarlos y no esperar que el recolector de basura los elimine. En Php esto se haria llamando a la funcion unset() cada vez que dejemos de usar un objeto. Lo que haces realmente es intercambiar menos velocidad por mas memoria ram. Por ejemplo:

$suma=0;
for($x=0;$x<10$x++){
$raw= mysql_query("select numeric_data from mytable where id=$x") ;
$resp = mysql_fetch_array( $raw) ;
unset($raw) ;
$suma = $resp['numeric_data']+$suma;
unset($resp) ;
}
echo "La Suma es",$suma;
unset($suma) ;

¿No seria mas facil hacer un select de todos los datos de la tabla, en lugar de estar accesando fila por fila mediante PHP? Hell yes, pero sacar todos los datos de una tabla significa mas uso en memoria RAM que poniendonos en el caso de sacar fila por fila y unsetear esa memoria que ya no vamos a usar, por supuesto que usaras mas ciclos de CPU en la segunda opcion, es lo que se dice un tradeoff entre memoria y cpu. Al final tu aplicacion sera mas lenta pero al tener mas memria RAM, mas usuarios pueden conectarse al sistema sin que se empieze la paginacion de memoria. NOTA: Particularmente no me gusta mucho este metodo debido a la particularidad como trabaja PHP liberando memoria. En la pagina de PHP acerca de unset , los comentarios de usuarios dicen cosas que pueden ser contradictorias, seria interesante ver las pruebas de alguien acerca del unset.


B) Lazy Programing: La opcion favorita. Lo que haces basicamente es en lugar de almacenar todos los datos de una vez en un objeto, almacenas solo una referencia como su ID o mejor aun, nada, y solo al momento donde requieras usar esos datos lo inicializas. Lazy Programing funciona de pelos con AJAX. Por ejemplo imaginemos en un mapa imprimes imagenes de las unidades dispuestaas en el mismo. Si quisieras saber informacion acerca de alguna unidad, haces click en la imagen y por Ajax sacas la informacion de esa unidad recien en ese momento, en lugar de calcular toda la informacion de una vez. Se podria resumir LazyOperation como "El codigo mas rapido es el que nunca se ejecuta".

C)Pensamiento Divergente: Cosas como, mejor compramos un paquete de memoria RAM y nos olvidamos la optimizacion, a esto me refiero con pensamiento divergente. Por ejemplo comprar una memoria RAM DDR2 de 2 gigas, posiblemente salga unos 40 dolares a lo mucho. El coste de implementar una optimizacion, digamos, una semana de pagarle a un programador, especialista en este tema... pues va a salir mas de 40 dolares. Siempre existiran opciones para cada cosa que queramos hacer.

Espero les haya servido en algo,y Cualqueir hatemail sobre el unset, porfavor en comentarios XD

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

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

0 comentarios:

Publicar un comentario