La semana pasada Google lanzo su proyecto de optimización más reciente se trata del modulo pagespeed para Apache 2, bajo su iniciativa de hacer la web más rápida. Cuidado a no confundir con la extensión Page Speed que también responde a la misma campaña pero que poco tiene que ver con este nuevo proyecto.
Lo interesante de mod_pagespeed es que realiza de forma automática correcciones a nuestros sitios para que reflejen las mejores practicas para tener una web rápida, es decir, nos ayuda en la optimización sin prácticamente tocar una línea de código. Como yo siempre fui bastante reacio a las correcciones automáticas este fin de semana lo instale y realice varias pruebas, algunas con excelentes resultados y otros con no tanto.
Comencemos.
Requerimientos para instalar mod_pagespeed
- Acceso SSH a nuestro servidor, por lo general este tipo de acceso lo vamos a tener en servidores VPS o bien dedicados.
- Consola SSH
- Paciencia, cafe o cualquier snack que nos ayude emocionalmente 😛
Instalación
El modulo page speed esta disponible para las plataformas CentOS/Fedora (32-bit y 64-bit), Debian/Ubuntu (32-bit y 64-bit) y finalmente, como es de esperarse obviamente, para Apache 2.2.
La instalación varia según la plataforma, la forma de realizarla sugerida por Google es la siguiente:
Para instalar los paquetes en Debian/Ubuntu, ejecutar desde la consola con acceso root:
dpkg -i mod-pagespeed-*.deb
apt-get -f install
Para CentOS/Fedora, ejecutar también como root:
yum localinstall mod-pagespeed-*.rpm
o
rpm -i mod-pagespeed-*.rpm
Nota 1: Si no cuentan con el repositorio de Google instalado (cosa muy probable) pueden hacerlo con el siguiente comando:
sudo touch /etc/default/mod-pagespeed
Nota 2: Antes de comenzar la instalación es muy importante que busquen en Google si su proveedor de alojamiento cuenta con alguna opción de instalación automática. Por ejemplo Dreamhost permite la instalación con tan solo tildar una opción. Otro ejemplo es Godaddy que también tiene preinstalado el modulo. En caso contrario muchos proveedores como Mediatemple están brindando guías punto a punto de como instalar este modulo especialmente en base a sus servidores y su configuración.
Editar el archivo pagespeed.conf
Una vez que finalizamos la instalación y si todo salió bien vamos a poder editar el archivo de configuración de Page Speed, es justamente desde aquí que le vamos a decir al modulo que tipo de optimización vamos a querer realizar en nuestro sitio. Para editar este archivo podemos utilizar vi, por lo general la ruta del archivo será la siguiente:
vi /etc/httpd/conf.d/pagespeed.conf
Antes de hacer nada, vamos a buscar dos líneas en especial que son las siguientes:
ModPagespeedFileCachePath "/var/mod_pagespeed/cache/"
ModPagespeedGeneratedFilePrefix "/var/mod_pagespeed/files/"
Estas lineas son muy importantes, indican donde se van a guardar los archivos generados por pagespeed como así también las cache dinámicas, por favor revisen si las carpetas indicadas están creadas y con permisos de escritura.
El archivo de configuración por defecto que viene con Page speed contiene una configuración básica de las distintas opciones, en si todo el archivo es bastante fácil de comprender, por ejemplo a continuación coloco un extracto de la instalación básica de los distintos filtros.
ModPagespeedFileCachePath "/var/mod_pagespeed/cache/"
ModPagespeedFileCacheSizeKb 102400
ModPagespeedFileCacheCleanIntervalMs 3600000
ModPagespeedGeneratedFilePrefix "/var/mod_pagespeed/files/"
ModPagespeedLRUCacheKbPerProcess 1024
ModPagespeedLRUCacheByteLimit 16384
ModPagespeedCssInlineMaxBytes 2048
ModPagespeedImgInlineMaxBytes 2048
ModPagespeedJsInlineMaxBytes 2048
ModPagespeedCssOutlineMinBytes 3000
ModPagespeedJsOutlineMinBytes 3000
¿Filtros? Probablemente muchos se quedaron pensando a que me refería, o al menos le llamo la atención la palabra, por suerte los llamados filtros de Page Speed son los que nos permiten a nosotros configurar en su máximo esplendor este modulo de apache, con ellos vamos a determinar que queremos que haga exactamente.
Uso de los filtros de Page Speed
Los filtros pueden estar o no activos, para ello basta con colocar una directiva en cada caso:
Desactivar filtros:
ModPagespeedDisableFilters nombrefiltroA, nombrefiltroB
Activando filtros:
ModPagespeedEnableFilters nombrefiltroA, nombrefiltroB
Es muy importante tener en cuenta estas dos cosas, porque de aquí vamos a poder ir haciendo las respectivas pruebas. Un pequeño consejo, en el mismo archivo de configuración (pagespeed.conf) donde vamos ir activando o desactivando filtros según nuestras necesidades tenemos la línea de pánico, es decir, aquella que vamos a utilizar si hacemos algo que rompe todo en nuestro sitio :P, la linea en cuestión en definitiva activa o desactiva el mod completo y es la siguiente:
ModPagespeed on
Si en lugar de on escribimos off vamos a desactivar el modulo completo, como dije antes, para usar el caso de pánico si vemos que algo que activamos hizo algún desastre 😛
Filtros de mod_pagespeed
A continuación coloco los distintos filtros posibles de Page Speed y para que sirve cada uno de ellos, recuerden que para activarlos deben colocar ModPagespeedEnableFilters seguido del nombre del filtro, en caso de utilizar varios simplemente separen los nombres por comas.
add_instrumentation
Inserta en el código de forma automática un pequeño script javascript para controlar el tiempo de respuesta de nuestro sitio. El resultado luego lo podemos visualizar desde las estadísticas de Page Speed, las estadísticas vienen activadas por defecto al momento de instalar el modulo.
extend_cache
Brinda la posibilidad de potenciar el cacheo de elementos, para eso agrega un tiempo máximo de vida dentro de las cabeceras http, para aprovechar la capacidad de los navegadores modernos de guardar elementos en la cache local. Ademas utiliza un hash para renombrar los elementos que se encuentran en la cache.
Por ejemplo un elemento HTML y su cabecera http:
HTML tag : <img src="logo.gif" />
HTTP header: Cache-Control:public, max-age=300
El mismo ejemplo utilizando el mod_pagespeed:
HTML tag : <img src="ce.c17941127d34679357baa1b36fb4ecc5.logo,g" />
HTTP header: Cache-Control:public, max-age=31536000
collapse_whitespace
Quita todos los saltos de línea innecesarios en el HTML. Reduce el tamaño del documento al quitarlos acelerando la descarga.
combine_css
Como su nombre lo indica combina múltiples archivos CSS en uno solo. Con esto lo que logramos es reducir las llamadas al servidor. Por ejemplo si nuestro sitio cuenta con 3 archivos CSS mod_pagespeed los combina a los tres por orden de aparición en uno solo y lo guarda bajo un nombre creado en base a un hash.
combine_heads
Si nuestro documento contiene más de un head los combina en uno solo mejorando el renderizado en el navegador.
move_css_to_head
Mueve las llamadas a los archivos CSS al head por más que estas se encuentren al final del documento. Practica que mejora el renderizado de nuestro navegador.
elide_attributes
Un filtro para mi muy controversial. Elimina muchos tags “innecesarios” para reducir el tamaño del documento, pero a la vez deja a nuestro sitio como un documento invalido XHTML. Ademas hay que usarlo con mucha precaución si utilizamos por ejemplo jQuery porque elimina muchas veces cosas que son necesarias a la hora de “levantar” alguna variable. En lo personal no me gusta este filtro.
Ejemplo de un elemento:
<button name="ok" disabled="disabled">
El mod_pagespeed reescribe:
<button name="ok" disabled>
inline_css e inline_javascript
Ambos filtros hacen lo mismo. Copian el contenido de un CSS o JS externo y lo pegan directamente en el documento evitando hacer una llamada externa. Muchos se estarán preguntando que decide que se pega en el documento y que no, la respuesta esta en el extracto original del pagespeed.conf que coloque al principio, porque ahí es donde se estipula el tamaño máximo del archivo.
Por ejemplo con ModPagespeedCssInlineMaxBytes 2048 estamos diciendo que embeba en el documento todos los archivos CSS que no superen los 2048 bytes, si el archivo supera este tamaño que continue siendo una llamada externa, lo mismo ocurre con inline_javascript.
outline_css y outline_javascript
Hace exactamente lo contrario al ejemplo anterior. Si el CSS se encuentra dentro del documento y supera un tamaño máximo, este se quita del documento original y es llevado a un archivo externo. También este tamaño se decide desde las directivas utilizando ModPagespeedCssOutlineMinBytes y ModPagespeedJsOutlineMinBytes.
remove_quotes
Remueve las comillas innecesarias para ahorrar espacio. En este caso me parece una buena práctica. Probablemente el ahorro en recursos no sea impresionante, pero de seguro se notara al menos un poco al llegar a fin de mes 😛
remove_comments
Quita todos los comentarios del código HTML. Ahorrando espacio, es una opción bastante buena para ahorrarnos trabajo a nosotros.
rewrite_css, rewrite_images y rewrite_javascript
Los tres filtros que a mi más me gustaron. Se encargan de comprimir nuestros archivos al máximo posible. En el caso de las imágenes reduce el tamaño sin perder absolutamente nada de calidad. De todas las opciones estas tres son las que sin lugar a duda más diferencia marcaran a la hora de tiempos de descarga y ahorro de recursos (especialmente si hablamos de transferencia de datos).
Algo interesante de mod_pagespeed es que al trabajar con cache de datos no sobrecarga demasiado al servidor, por ejemplo cuando visitamos una pagina con una imagen la misma se muestra de forma original, pero la magia viene en la segunda visita porque ya va a mostrar la imagen desde la cache con las mejoras y optimizaciones realizadas.
Conclusión
El modulo de Page Speed es otra apuesta de Google por promocionar una serie de buenas practicas que existen desde ya hace bastante tiempo para que nuestros sitios web se descarguen muy rápido. La realidad es que el modulo esta creado para aquellas personas que no desean lidiar desde un comienzo con esta serie de lineamientos. Es una forma de automatizar cosas que tendríamos que hacer nosotros automáticamente al publicar un proyecto. No obstante es útil y practico, una vez instalado nos vamos a olvidar de muchos aspectos y tendremos gran parte de nuestro sitio optimizado.
En el blog de Google Webmaster al momento de lanzar el modulo se habla de una mejora del doble de velocidad. Este numero es muy probable que se alcance en sitios que no tienen ninguna optimización, pero no ocurrirá en aquellos sitios que ya cumplan con varias pautas o buenas practicas, como por ejemplo la de comprimir archivos CSS, Javascript y una optimización del tamaño de las imágenes.
Queda en cada uno de nosotros que filtros probar y cuales no. Por el momento aquí Pagespeed esta desactivado, pero seguiré probando los fines de semana con menos trafico que combinación es la que funciona mejor 😀
Más información sobre mod_pagespeed:
- Ejemplos uso de filtros
- Sitio oficial de mod_pagespeed
Mariano
14 años ago
Excelente post Pablo y como comentas, justo hoy a la mañana me entere que Dreamhost tenia la opción para habilitar el mod_pagespeed para cada sitio, así que esta noche empezare con algunas pruebas en alguno que no tenga muy optimizado.
Un Abrazo y gracias por la información 😀
Pablo
14 años ago
@Mariano: Gracias por el comentario. Yo en Dreamhost lo probe el viernes, lo que no logre encontrar y creo que no esta disponible es acceso al archivo pagespeed.conf que es donde podes colocar los filtros, asi que por el momento creo que desde dreamhost se pueden hacer solamente unas mejoras en cuanto a la optimización con este mod. Seria interesante que el dia de mañana habiliten la activación por medio del htaccess como se hace con el mod deflate, o cualquiera similar.
Mariano
14 años ago
@Pablo, si es así, en los casos/sitios en que se active el mod, nos tendremos que conformar con las optimizaciones por default. Entonces, mi mayor temor es que al no poder elegir que opciones habilitar, tengamos que deshabilitar todo el modulo, por un problema simple, por ejemplo, de desconfiguración en el diseño, uffff.
A hacer pruebas se ha dicho!
Pablo
14 años ago
@Mariano: Por lo que pude ver, Dreamhost usa solo las cosas que son de bajo riesgo, por ejemplo usa la opcion para embeber el css dentro del documento para ahorrar llamadas externas, o sea, no hay problema con eso. Lastima que no permite setear cosas como por ejemplo la optimizacion de imagenes, pero estimo que en unos meses lo haran 😀
Saludos!
Comprimir, combinar y cachear archivos CSS y JS con PHP | Kabytes
14 años ago
[…] apenas unos días publique un pequeño tutorial sobre el mod_pagespeed, ahora y siguiendo un poco con la idea de optimizar nuestros sitios les quería comentar sobre […]
Lo mejor de mi RSS del 8 al 14 de noviembre | Linux Hispano
14 años ago
[…] Tutorial básico de mod_pagespeed para Apache 2 – Kabytes […]
Lo mejor de mi RSS del 8 al 14 de noviembre | Superlinux
14 años ago
[…] Tutorial básico de mod_pagespeed para Apache 2 – Kabytes […]
D
14 años ago
Me gustó mucho el artículo, dicen que «en casa de herrero cuchillo de palo» esta web mide 80/100 con el complemento pagespeed para firefox.
cristian
13 años ago
Hola, una pregunta: ¿si tengo el wordpress instalado en /home/cristianls no en /var/html y he activado y configurado el pagespeed, esta haciendo algo, o no ?
cristian
13 años ago
Bueno, ya veo que si. Otra cosa: con mod_pagespeed activado tengo 96 puntos en page speed online; sin el modulo, tengo 97. ¿ Lo dejo, o lo quito ? Me esta ayudando o no ?
D
13 años ago
Cristian,
Yo estuve experimentando con y puedo decirte que esas mediciones no son del todo exactas, si noto una mejora de performance con el mod activado, pero no me ayuda por ejemplo con los archivos javascript cuando activo la directiva para que los comprima o los una mi sitio se «ROMPE».
Ahora si te mide mejor sin el módulo, me pasó algo parecido, pero en mi caso fue asi:
Media 87 sin el módulo, 90 con el módulo activado.
Al activar mod_expires (o algo asi no recuerdo bien el nombre) y configurar el .htaccess recibí una mejora que llegó a medir 99
Las pruebas las hice con layouts web, nunca con un portal completo, asi que puede que me equivoque al afirmar que el page speed funciona mejor cuando se activan otros módulos de apache y se le hace un TUNNIG específico para cada web.
cristian
13 años ago
Muchas gracias. Lo voy a dejar hasta mañana para ver en analytics si ha bajado algo el tiempo de carga o no pero me parece a mi que no voy a notar ninguna diferencia ya que la base de datos, los caches, la plantilla y las imagenes estan optimizadas «a tope». Creo que no voy a poder pasar de lo 97 puntos manteniendo los *.js de google. Parece cachondeo pero es así: google con sus scripts no te deja hacer el sitio mas rapido.
Ademas no se si de verdad tengo que peocuparme tanto por esto; no creo que esto pese mucho a la hora de posicionar la pagina en los resultados.
cristian
13 años ago
Hola,
Muy bueno el tutorial pero tengo una pregunta:
Veo que mod_pagespeed añade al nombre de las imagenes , despues de la extension, algo parecido a esto «.png?9d7bd4». Hasta aqui, ningun problema… Perrrroo… el test de pagespeed.googlelabs.com me dice que quite los interogatorios para ….., es deci, que no le hace mucha gracia a Google de que el enlace lleve un «?» por el medio.
Vale, ahora, ¿Como se quita eso ?
Miguel Angel
12 años ago
Hola,
un artículo muy bueno y bien explicado. Yo lo probé y lo tuve que desactivarlo porque optimizaba la web pero la ralentizaba. Es una cosa rarísima ya que tendría que ser todo lo contrario.