Todo en menos de un segundo

Esta semana parece que a casi todos los supervivientes de El Reto Blogger les ha dado por ponerse a hablar de `su libro´ y yo no voy a ser menos…

Esta semana parece que a casi todos los supervivientes de El Reto Blogger les ha dado por ponerse a hablar de `su libro´ y yo no voy a ser menos…

Nuestra lema esta semana ha sido `menos de un segundo o nada´, ha sido algo asi como un mantra que nos hemos repetido hasta la saciedad… y es que nos hemos propuesto que ninguna de las páginas de nuestras aplicaciones tarden en cargarse más de un segundo.

Lo primero con la ayuda de Google Analytics y analizando los logs del servidor hemos hecho una relación de las páginas más visitadas, para asi centrar nuestros esfuerzos en las páginas más importantes… y dosificar el arte del Maestro.

Después hemos troceado el código incluyendo contadores después de cada conexión a la base de datos. Cuando veiamos alguna conexión que tardaba mucho en completarse, mostrábamos la SQL en pantalla y aquí es donde empezaba lo realmente interesante.

Parece mentira como la misma sentencia `diseñada´ de distintas maneras puede obtener el mismo resultado pero muchisimo más rápido. Podemos ver un ejemplo aquí, intentamos contar los registros que hay en un año y mes concreto, en la primera SQL hacemos uso de la función month() y year()… en la segunda SQL hacemos los mismo pero en el WHERE de la SQL optamos por indicar una fecha de inicio y una fecha final.

No debería haber mucha diferencia entre una y otra, pero en la primera MySQL trabaja con 26.800 registros y en la segunda sólo con 95, la diferencia de tiempo es muy grande (bueno, son décimas de segundo pero que van sumando y sumando… y nos van alejando de nuestro objetivo de no superar el segundo).

Cuando se han retocado las SQL, se han revisado los índices y aun no se ha alcanzado la meta ya comienza a ponerse la cosa un poco más complicada y llega el momento de meter la tijera: ¿realmente ese listado tiene que verse en esa pantalla? a lo mejor es más conveniente ocultarlo y dejar que el usuario sea el que decida cuando quiere verlo, pulsando en icono de despliegue [+]

También cuando el volumen de registros va creciendo hay que optar por sustituir consultas on-line por procesos batch. Muchas veces esta decisión implica que vas a perder la `información on-line´ a favor de que una información un pelín desactualizada se muestre con fluidez y por tanto de manera más cómoda para el usuario. Dependiendo del tipo de información el cambio puede merecer sin duda la pena, a un nivel agregado poner 12.502 ó 12.504… da prácticamente lo mismo (al menos en nuestra situación, si fueran valores de cotización… otro gallo cantaría).

Asi que con esas estamos ahora, repasando cosas programadas hace años para que funcionen aun mejor. No se puede decir que sea divertido… pero si que es un poco adictivo porque estás muy centrado en sumar centésimas de segundo y mientras que haces eso… no piensas en otra cosas que te preocupan.