Optimizaciones en el blog

24 May 2009 at 22:58

Desde que Xisco me pidió consejo tras probar varias de sus páginas con YSlow tenía pendiente escribir este post. YSlow es un plugin para Firefox que analiza distintos aspectos que pueden afectar al rendimiento de páginas webs y realiza recomendaciones. Todos los aspectos que se tienen en cuenta giran alrededor del tiempo de carga de la web. No entran en temas como optimización de base de datos y otros aspectos internos del servidor.

De todas las reglas, las más sencillas de corregir son:

Otras reglas pueden suponer reescribir parte de la aplicación pero para solventar estas tres basta con añadir algunas líneas al final del .htaccess del directorio raíz de nuestra web. Hay que tener en cuenta que los modulos necesarios deben estar instalados y la configuración del servidor nos debe permitir establecer esta configuración (directiva AllowOverride)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# Add Expires Header
<IfModule mod_expires.c>
ExpiresActive on
ExpiresByType image/gif "access plus 1 week"
ExpiresByType image/jpeg "access plus 1 week"
ExpiresByType image/png "access plus 1 week"
ExpiresByType text/css "access plus 1 week"
ExpiresByType application/javascript "access plus 1 week"
</IfModule>
 
# Compress CSS files
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/plain text/html text/xml application/rss+xml application/atom_xml
AddOutputFilterByType DEFLATE text/css application/javascript
</IfModule>
 
# ETag only use file time and size, but no inode
FileETag MTime Size

En las líneas 2 a 9 configuramos que las imágenes, hojas de estilo y javascripts tengan una fecha de expiración de una semana a partir del momento en que se ha visitado la página web. Esto significa que el navegador del usuario usará la copia local (fichero cacheado) durante una semana. Este comportamiento puede suponer un problema si tenemos ficheros de estos tipos que vamos modificando sin cambiarle el nombre (p.e. un banner) ya que los navegadores de algunos de los usuarios mantendran las versiones antiguas.

Desde la 12 a la 15 configuramos la compresión de las páginas HTML, feeds (text/xml, application/rss+xml y application/atom_xml), hojas de estilo y javascripts. De esta forma conseguimos ahorrar tráfico (importante si estamos en un hosting con limitaciones de tráfico)  y que el tiempo de transmisión sea menor.

Finalmente, en la última línea configuramos los ETags generados por el propio servidor Apache para los ficheros estáticos. Por defecto, Apache tiene en cuenta tres aspector para generar el ETag: el inodo, fecha de modificación y tamaño. Pero se recomienda no usar el inodo para generarlo ya que si nuestra web empieza a ser conocida y tenemos que distribuir la carga entre varios servidores, es muy poco probable que un fichero tenga el mismo inodo en todos los servidores de la granja. Entonces, el ETag variaría en funcion del servidor que lo generara por lo que no se sacaría provecho a esta cabecera. Para resolverlo, configuramos el Apache para que genere el ETag sólo considerando la fecha de modificación y el tamaño del fichero.

Con esta simple configuración yo conseguí pasar de una puntuación de 74 a 89.

A medida que pueda escribiré algún post más sobre optimización web y como resolverlo en el caso concreto de un blog que usa WordPress.

5 Responses to “Optimizaciones en el blog”

  1. aaloy says:

    Has provat què et surt si configures el ruleset de YSlow a “Small Site o Blog”? Tenir la opció de CDN per la majoria de webs no té massa sentit tenir-ho actiu. També hi ha que tenir en compte que s’ha d’agafar el YSlow no com a un valor absolut. Al blog per exemple hi vaig posar un javascript per mantenir un comptador de visites, com que no hi tenc control no es pot comprimir (al manco fàcilment) i ja ho dóna com a una pèrdua de velocitat. Igual que el tema de tenir un subdomini per les imatges: és l’ideal, Django ho recomana, fins i tot el tenir servidors separats per serivir continguts i imatges i realment va molt bé, però per blogs com els nostres no compensa l’extra de feina i manteniment.

    • Eduard says:

      Ja havia vist que amb el perfil de “Small Site or Blog” tenc una puntuacio de 99, i encara que la puntuacio d’YSlow no se pot prendre com un valor absolut, m’he entretengut (i apres) molt investigant com puc millorar la puntuació. Es com un repte :-P

  2. Muy buena la entrada, estoy también peleándome con la optimización del blog y el ejemplo del htaccess me ha venido muy bien. He ganado tres segundos en la carga y me ha subido la puntuación del test. Eso si, no consigo quitar el error del Expires, imagino que en mi hosting tendrán eso bloqueado.

  3. Amidei says:

    Muy buena la entrada, estoy también peleándome con la optimización del blog y el ejemplo del hyaccess me ha venido muy bien. He ganado tres segundos en la carga y me ha subido la puntuación del test. Eso si, no consigo quitar el error del Expires, imagino que en mi hosting tendrán eso bloqueado.;