Cómo utilizar mod_pagespeed para optimizar y acelerar su página web

Introducción a mod_pagespeed

El servidor Apache se puede extender utilizando módulos. Un servidor básico incluye módulos para muchas funciones comunes como la autenticación, php o integración con MySQL.
Google diseñó el modulo pagespeed como una manera fácil de aplicar prácticas comunes para optimizar y acelerar una página web. Por ejemplo, incluye funciones para optimizar imágenes, javascript, código CSS, HTML y XML. Puede utilizar la configuración por defecto para automatizar la optimización, o personalizar su servidor.


Instalación

Oficialmente Google ha lanzado versiones de mod_pagespeed disponibles para CentOS/Fedora y Debian/Ubuntu. Usted puede descargar la ultima versión directamente de Google. Para instalarlo, siga las instrucciones en la página de descarga de Google. Tiene que reiniciar Apache antes de poder utilizar mod_pagespeed, pero es buena idea configurar el módulo primero.

 

Configuración de pagespeed.conf

El módulo se configura utilizando el archivo pagespeed.conf. El archivo se encontrará en diferentes directorios dependiendo de la versión de Linux:
  • Debian/Ubuntu: /etc/apache2/mods-available
  • CentOS/Fedora: /etc/httpd/conf.d
El archivo de configuración del modulo está bien escrito, pero en inglés. Encuentre algunas de las opciones más importantes en la lista de abajo. Para deshabilitar una línea en el archivo, introduzca el símbolo # al principio de la línea y será como una línea de comentario por Apache.
  • ModPagespeed on: Puede habilitar o deshabilitar pagespeed con esta línea. Utilize on para habilitar y off para deshabitar.
  • ModPagespeedDisallow: Utilice esta opción para excluir un directorio o archivo de las optimizaciones de pagespeed. Esto puede ser necesario en el caso de algunos archivos javascript. Ejemplos de uso:
    1. ModPagespeedDisallow */archivo1.js – este directivo deshabilita pagespeed para el archivo1.js en cualquier directorio.
    2. ModPagespeedDisallow */directorio1/* – también puede excluir un directorio completo y sus archivos.
    3. ModPagespeedDisallow * – puede utilizar este directivo para excluir todos los directorios y archivos y habilitar directorios específicos.
  • ModPagespeedAllow: Igual a ModPagespeedDisallow, pero con efecto opuesto. Se utiliza para habilitar pagespeed para directorios o archivos específicos. No es necesario usar ModPagespeedAllow al menos que se ha utilizado ModPagespeedDisallow
  • AddOutputFilterByType MOD_PAGESPEED_OUTPUT_FILTER: El archivo puede contener dos líneas con este directivo, uno para habilitar el procesamiento de HTML y otro para XHTML y XML.
  • ModPagespeedFileCachePath y ModPagespeedGeneratedFilePrefix: Por defecto estos directivos señalan a /var/mod_pagespeed/cache/ y /var/mod_pagespeed/files/ respectivamente. Estos directorios son utilizado por pagespeed para guardar archivos optimizados. Puede cambiar los directorios, pero deben ser directorios existentes y pueden ser escritos por Apache ya que el módulo pagespeed no crea los directorios.
  • ModPagespeedRewriteLevel: Este directivo determina los filtros utilizados por pagespeed. Por defecto no hace falta configurar este directivo si desea utilizar los filtros principales. La opción por defecto es CoreFilters, pero también puede utilizar TestingCoreFilters para habilitar los filtros inestables o beta. Si desea escoger los filtros uno por uno, puede introducir ModPagespeedRewriteLevel PassThrough para habilitar sólo los filtros que prefiere.
  • ModPagespeedDisableFilters: Esta opción le permite excluir filtros específicos, por ejemplo si ocurren errores debido a un filtro en particular.
  • ModPagespeedEnableFilters: Esta opción le permite habilitar filtros no incluidos en Core. También se utiliza si decide usar la opción PassThrough para controlar lo filtros utilizados por el módulo pagespeed.
  • ModPagespeedShardDomain: Es una opción avanzada de pagespeed para distribuir los archivos optimizados por pagespeed entre varios sub-dominios del dominio principal. Por ejemplo, con un dominio principal de ejemplo.com, si se configuran sub-dominios como sub1.ejemplo.com, sub2.ejemplo.com, etc., entonces pagespeed los puede utilizar para distribuir los archivos optimizados. Esto es particularmente efectivo si tiene más de 30 recursos por página. No debe utilizar más de 4 sub-dominios ya que puede ralentizar la página en vez de acelerarla. El sintaxis es ModPagespeedShardDomain dominio_principal subdominio1,subdominio2, subdominio3. Utilizando ejemplo.com, la línea para utilizar los dos sub-dominios sería ModPagespeedShardDomain ejemplo.com sub1.ejemplo.com,sub2.ejemplo.com. Los dominios utilizados ya deben estar configurados en su servidor DNS. Debe tener cuidado con esta opción ya que los resultados pueden variar y no todos los javascripts funcionan con esta opción habilitada.
  • ModPagespeedJpegRecompressionQuality: Esta opción le permite configurar la calidad de la imagen JPG creada por pagespeed con la opción rewrite_images. Por defecto, esta opción sólo remueve la información de la imagen. Pero se puede configurar para recomprimir sus imágenes JPG con una calidad más pequeña. Por ejemplo, si tiene muchas imágenes sin optimizar, puede usar ModPagespeedJpegRecompressionQuality 70 para reducir el tamaño del archivo de cada uno y acelerar más su página web.

 

Filtros de pagespeed

Pagespeed incluye una variedad de filtros. Los filtros designados Core son los filtros principales que se habilitan si utiliza el archivo pagespeed.conf por defecto. Aunque como ya se mencionó puede personalizar esa configuración y utilizar filtros específicos. El siguiente cuadro incluye una breve descripción de cada filtro e indica cuales forman parte de los filtros principales.
FiltroPrincipalDescripción
add_headAñade un elemento <head> en el documento si no está presente.
combine_headsCombina elementos <head> si existe más de uno en el documento.
strip_scriptsNoElimina scripts, como javascript para experimentos
inline_import_to_linkElimina @import para CSS del documento y los convierte en etiquetas equivalentes de <link>.
outline_cssNoMueve grandes cantidades de comandos CSS a un archivo externo que se puede utilizar en un cache.
outline_javascriptNoIgual que la opción de CSS, mueve comandos de javascript a archivos externos para utilizar un cache.
move_css_above_scriptsNoMueve elementos de CSS encima de las etiquetas <script> en el documento.
move_css_to_headNoMueve los elementos CSS al la parte head del documento.
combine_cssCombina elementos CSS en un elemento.
rewrite_cssRemueve espacios y comentarios de los archivos CSS.
rewrite_style_attributesNoCambia los atributos de estilo CSS utilizando el filtro rewrite_css.
rewrite_style_attributes_with_urlCambia sólo los atributos de estilo CSS que contienen url.
flatten_css_importsNoMueve todos los CSS al documento que se utilizan por medio de un @import.
make_google_analytics_asyncNoConvierte el código de Google Analytics a asincrónico.
rewrite_javascriptRemueve espacios y comentarios de archivos de javascript.
combine_javascriptNoCombina archivos de javascript en un archivo
inline_cssMueve archivos pequeños de CSS al documento HTML.
inline_javascriptMueve archivos pequeños de javascript al documento HTML.
local_storage_cacheNoMueve recursos inline al almacenamiento HTML5.
insert_gaNoAgrega el código de Google Analytics a cada página.
rewrite_imagesOptimiza imágenes, codificando cada uno de nuevo, eliminando pixeles extras, e incluyendo imágenes pequeñas inline en el documento
convert_jpeg_to_progressiveNoConvierte imágenes jpeg grandes en imágenes progresivos.
convert_png_to_jpegNoConvierte imágenes png o gif a jpeg.
convert_jpeg_to_webpNoConvierte imágenes webp a jpeg para navegadores que pueden leerlo.
insert_image_dimensionsNoAgrega dimensiones a los atributos de la etiqueta img si no lo tiene.
inline_imagesIncluido automáticamente por rewrite_images. Cambia imágenes pequeñas utilizando url de data:.
recompress_imagesIncluido automáticamente por rewrite_images. Vuelve a comprimir las imágenes, eliminando el exceso de los metadatos y convirtiendo archivos gif en png.
resize_imagesIncluido automáticamente por rewrite_images. Cambia el tamaño de imágenes para corresponder a las dimensiones especificadas en la etiqueta img.
inline_preview_imagesNoUtiliza imágenes inline de baja calidad como marcadores de posición que serán reemplazadas con las imágenes originales una vez que la página web sea cargada.
resize_mobile_imagesNoIgual que inline_preview_images pero para navegadores móviles.
remove_commentsNoElimina comentarios en archivos HTML, pero no javascript o CSS.
collapse_whitespaceNoElimina espacios en archivos HTML sin modificar las etiquetas pre, script,style y textarea.
elide_attributesNoElimina los atributos que no son significativos de acuerdo a la especificación HTML.
extend_cacheExtiende la vida de cache de todos los recursos mediante la firma de las direcciones URL con un hash de contenido.
sprite_imagesNoCombina imágenes de fondo especificadas en CSS en un sprite
rewrite_domainsNoCambia el dominio de recursos no configurados por pagespeed utilizando ModPagespeedMapRewriteDomain y ModPagespeedShardDomain.
trim_urlsNoAcorta los URL al hacerlos relativos al URL de base.
remove_quotesNoElimina las comillas innecesarias en atributos HTML.
add_instrumentationNoAgrega un archivo javascript a la página para medir la velocidad.
convert_meta_tagsAgrega un encabezado de respuesta para cada meta etiqueta con un atributo http-equiv equivalente.
defer_javascriptNoRetrasa la ejecución de archivos javascript hasta que la página termine de cargar. Esta opción puede acelerar la página web, pero también puede dar resultados extraños en algunos archivos javascript. Asegurase de probarlo de antemano.
lazyload_imagesNoCarga las imágenes cuando son visibles en el navegador. Esta opción no siempre funciona, particularmente con algunos javascript.
Puede encontrar una descripción actualizada, aunque en inglés, de todos los filtros en la página web de Google para pagespeed. En general, si no quiere probar los filtros uno por uno, o configurar pagespeed, puede utilizar las opciones que tiene por defecto con buenos resultados. Solo las opciones más seguras y estables son incluidas entre el grupo de filtros marcados Core o principales.


Consejos

Después de instalar mod_pagespeed o cambiar la configuración, tendrá que reiniciar Apache. Introduzca el siguiente comando:

  • Fedora/CentOS: /etc/init.d/httpd restart
  • Debian/Ubuntusudo service apache2 restart
Las opciones por defecto funcionan muy bien para la mayoría de las páginas web y es poco probable que causen errores. Pero puede optimizar la configuración aún más con un poco de tiempo y experimentación. Asegurase de no probarlo con su servidor principal, utilice una máquina de prueba o una máquina virtual

Comentarios