domingo, enero 22, 2012

Programacion de alto rendimiento (continua)

Un simple truco para mejorar el rendimiento en JavaScript en relacion a los ciclos es evitar el uso de la propiedad length de los arreglos como parte de la definicion.

Asi, es preferible utilizar una variable antes del inicio del ciclo que obtenga la longitud que controlara el final de ejecucion, por ejemplo:

for (var i = 0; i < arreglo.length; i++){
//operaciones
}

La razon es simple, por cada ejecucion del ciclo se recalcula la longitud del arreglo, para arreglos (o ciclos) cortos podria no tener gran impacto; sin embargo el beneficio es mayor cuando hablamos de ciclos largos o de arreglos cuyo calculo de tamano es complejo. Un ejemplo de esta ultima situacion es cuando se trata de elementos del DOM, obtener el tamano de un arreglo que forma parte de un documento HTML (por ejemplo todos los descendientes li de una lista ul), esto se debe a que muchos navegadores tienen que recorrer el arbol del DOM completo. La velocidad con la que JavaScript obtendra la longitud del arreglo en cada ciclo dependera del navegador que el cliente este utilizando, Internet Explorer 7 en particular sera el mas beneficiado al utilizar el codigo que a continuacion se sugiere pues puede aumentar el rendimiento por ciclo ejecutado en mas de un 100% incluso.

El codigo que comentamos deberia sustituir el anterior por algo como:

var valorMax = arreglo.length;
for (var i = 0; i < valorMax; i++){
//operaciones
}

En este caso no importa el numero de ciclos ni la complejidad de obtencion del valor maximo, ya que este calculo (costoso o no) se ejecutara con seguridad solo una vez.

Optimizaciones sencillas como la anteriormente ilustradas pueden parecer una solucion "no elegante" pues genera una linea de codigo extra, esto parece chocar con los principios de ciertos programadores que creen que la calidad del codigo esta directamente relacionada, entre otras cosas, con el numero de lineas escritas.

Hablar de rendimiento en lenguajes como JavaScript que transfieren su codigo completo al navegador cliente es un poco complejo, por una parte es cierto que tratamos de reducir el tamano del codigo fuente para asi transferir un archivo mas pequeno a traves de la red, sin embargo, no hay que olvidar que el uso de una linea extra a costo de la transferencia puede mejorar mucho mas la experiencia en ejecucion. Para mejorar la transferencia del codigo de JavaScript se utiliza otra tecnica conocida como "minimizing" de la cual nos ocuparemos posteriormente.

lunes, enero 02, 2012

La competencia de Grupon


Pues parece que Grupon tiene competencia, nada mas y nada menos que la muy temida Google, de hecho siendo ellos los dueños de la publicidad en Internet mas bien como que ya se habian tardado no? Su producto en cuestion es Google Offers, un servicio de promocion orientada a la oferta basada en posicion geografica.

Camisa HDR


Camisa HDR
Originally uploaded by elfidomx

Una imagen en HDR de la categoria de "just because"