"Amateurs built the ark
Professionals built the Titanic"
Desconocido
[+]
Desde la aparición en la escena del concepto de la web2.0, las páginas web han trasladado una parte de lógica importante al navegador para construir la interfaz de usuario. Mucha de esta lógica hace uso de pesadas librerías javascript de muchos kilobytes. Para asegurarnos de que la experiencia es tan agradable al visitante como pretendemos es necesario optimizar la página. Optimizarla significa tener un servidor eficiente (en software y hardware) y tener unos recursos ligeros que hagan que la página se descargue rápido.
En mi página no necesito preocuparme demasiado ya que recibo una cantidad irrisoria de visitas, pero el año pasado tuve problemas con el tamaño y el número de las peticiones de las librerías javascript. En las últimas obras añadí el script lightbox para mostrar con una animación superpuesta las fotos de este sitio web. No soy muy amigo de las chorraditas que se mueven pero este es un script estupendo porque es muy cómodo y porque no es nada invasivo¹. El script requiere del uso de dos archivos de la librería scriptaculous. Esto suponía tres peticiones independientes al servidor web de ficheros fuente bastante pesados.
Al tener varios ficheros pesados aumenta la latencia ya que se tarda más en bajarse los elementos que componen la página y el resultado es que nuestro visitante se desespera y se larga. En mi caso concreto, se tardaba unos cuantos segundos más en cargar la web de los que consideraba aceptable.
A continuación explicaré el proceso de limpieza de código que se realizó en esta web. Mostraré las instrucciones usadas para Linux pero deberían funcionar en MacOS. Antes de nada decir que es un método sencillo, rápido, eficiente y sobre todo seguro pero no es el que más nos optimiza el resultado. Esto lo aclararé al final del post.
cat scriptaculous/prototype.js > all_js.js cat scriptaculous/effects.js >> all_js.js cat lightbox.js >> all_js.js
Limpiamos el código con JSMIN. Nos quitará los comentarios, los espacios en blanco, los saltos de linea y los tabuladores innecesarios. Cuidado con el programa, por defecto nos sobreescribirá el fichero que le introducimos por parámetro así que recuerda tener el fichero original a buen recaudo por lo que pueda pasar.
En su página web puedes descargarte el binario para ms-dos y también te puedes bajar el código fuente en C. También se encuentra disponible para descarga como código fuente en C#, Java, Javascript, Perl, PHP, Python y Ruby. En nuestro caso usaremos el código fuente para crear un ejecutable con el que procesar nuestros ficheros.
Compilamos jsmin
gcc jsmin.c -o jsmin.out
Y lo usamos atacando nuestro fichero all_js.js y poniendo el resultado en all_js_min.js
./jsmin.out < all_js.js > all_js_min.js
gzip -9 -c all_js_min.js > all_js_min.js.gz
‹script src="/css/js/all_js_min.js.gz" type="text/javascript"›‹/script›
Decir que algunos frameworks ya incorporan la compresión javascript de serie (Dojo) y que entonces no seria necesario seguir estos pasos. En cualquier caso, si algún lector ha usado alguno de los otros métodos que no dude en ponerse en contacto conmigo para comentarme su experiencia.
Ya no se pueden añadir nuevos comentarios en esta historia.