Web: Mejorar el rendimiento de nuestro sitio mediante .htaccess – Hosting Linux

El rendimiento y el consumo eficiente de los recursos del servidor esta siendo cada vez más importante para los desarrolladores de paginas web.

La mayoría de los ajustes mas importantes de velocidad se pueden realizar mediante simples reglas en el fichero .htaccess, estas reglas pueden hacer que una pagina web vaya mucho mas rápido comprimiendo contenido y habilitando la cache del navegador.

Comprimir el contenido de nuestra web

Compresión reduce los tiempos de respuesta reduciendo el tamaño de la respuesta HTTP.

Es recomendable comprimir todos los ficheros HTML, scripts y hojas estilos. Por tanto se puede comprimir cualquier respuesta de texto como XML y JSON.

Imagnes y archivos PDF no se pueden comprimir por que ya estan comprimidos, intentar comprimir estos ficheros es un gasto de CPU y puede ampliar el tamaño del fichero.

Para comprimir el contenido, Apache 2 viene con un modulo por defecto llamado mod_deflate el cual está habilitado por defecto en los planes de hosting de Red Radio y PC.

El modulo mod_deflate ofreces la respuesta del filtro DEFLATE que permite que el contenido de tu servidor sea comprimido antes de enviarlo al cliente via la red.

Habilitar compresión gzip para las respuestas de texto:

<ifModule mod_deflate.c>
  AddOutputFilterByType DEFLATE text/html text/xml text/css text/plain
  AddOutputFilterByType DEFLATE image/svg+xml application/xhtml+xml application/xml
  AddOutputFilterByType DEFLATE application/rdf+xml application/rss+xml application/atom+xml
  AddOutputFilterByType DEFLATE text/javascript application/javascript application/x-javascript application/json
  AddOutputFilterByType DEFLATE application/x-font-ttf application/x-font-otf
  AddOutputFilterByType DEFLATE font/truetype font/opentype
</ifModule>

Habilitar el cache del navegador

Diseños de paginas web utilizan mas componentes, extensiones con lo cual se utiliza mas scripts, hojas de estilo y imágenes en una pagina.

La primera visita de un cliente realizará varias peticiones HTTP para descargar todo el contenido de la pagina web(html, css, js, jpg,…), pero usando las cabeceras Expires y Cache-Control se puede configurar dichos ficheros como cacheable. Esto evitar peticiones HTTP innecesarias a numerosas visitas hacia la pagina.

Apache habilita estas cabeceras gracias a los modulos mod_expires y mod_headers.

El modulo mod_expires controla la configuración the la cabecera HTTP de Expires y la directiva max-age de la cabecera HTTP de Cache-Control en respuestas del servidor.
Para modificar las directivas de Cache-Control distintas de max-age, se puede utilizar el modulo mod_headers.

Este modulo ofrece directivas para controlar y modificar las peticiones HTTP y las cabeceras de respuestas. Cabeceras pueden ser unidos, reemplazados o borrados.

Regla para la cabecera Expires:

# BEGIN Expire headers
<ifModule mod_expires.c>
  ExpiresActive On
  ExpiresDefault "access plus 5 seconds"
  ExpiresByType image/x-icon "access plus 2592000 seconds"
  ExpiresByType image/jpeg "access plus 2592000 seconds"
  ExpiresByType image/png "access plus 2592000 seconds"
  ExpiresByType image/gif "access plus 2592000 seconds"
  ExpiresByType application/x-shockwave-flash "access plus 2592000 seconds"
  ExpiresByType text/css "access plus 604800 seconds"
  ExpiresByType text/javascript "access plus 216000 seconds"
  ExpiresByType application/javascript "access plus 216000 seconds"
  ExpiresByType application/x-javascript "access plus 216000 seconds"
  ExpiresByType text/html "access plus 600 seconds"
  ExpiresByType application/xhtml+xml "access plus 600 seconds"
</ifModule>
# END Expire headers

Regla para la cabecera Cache-Control:

# BEGIN Cache-Control Headers
<ifModule mod_headers.c>
  <filesMatch "\.(ico|jpe?g|png|gif|swf)$">
    Header set Cache-Control "public"
  </filesMatch>
  <filesMatch "\.(css)$">
    Header set Cache-Control "public"
  </filesMatch>
  <filesMatch "\.(js)$">
    Header set Cache-Control "private"
  </filesMatch>
  <filesMatch "\.(x?html?|php)$">
    Header set Cache-Control "private, must-revalidate"
  </filesMatch>
</ifModule>
# END Cache-Control Headers

Note 1: No es necesario asignar la directiva max-age en la cabecera de Cache-Control debido a que ya es configurado por el modulo mod_expires.
Note 2: must-revalidate significa que una respuesta pasada debe ser revalidado, esto no significa que debe ser comprobado cada vez.

Desabilitar la cabecera HTTP ETag

ETags fueron añadidos como un mecanismo para validar entidades que es mas flexible que el ultimo de la fecha modificada.

El problema con los ETags es que son construidos típicamente usando atributos para hacerlos únicos para un servidor específico alojando un sitio web.

En Apache, esto se puede hacer simplemente añadiendo la directiva FileETag:

# BEGIN Turn ETags Off
FileETag None
# END Turn ETags Off

Unir y simplificar los ficheros estáticos

Reduciendo el numero de componentes por lo general reduce el numero de peticiones HTTP necesarios para la pagina web. Esta es la llave para para paginas web más rápidas.

Minimización es la práctica de quitar componentes, ficheros, … del código, aplicación para reducir el tamaño de esta forma se reduce el tiempo de carga hacia la pagina web.
Minification is the practice of removing unnecessary characters from code to reduce its size thereby improving load times.

Se puede ver más información en el siguiente enlace: http://www.samaxes.com/2009/05/combine-and-minimize-javascript-and-css-files-for-faster-loading/

Herramientas para comprobar el rendimiento

Siempre realiza comprobaciones de tu sitio web, utiliza los plugins para el navegador como YSlow o Page Speed.

Son muy fáciles de utilizar y son las mejores herramientas en el mercado para esta tarea.

También existe otra solución disponible en servidores linux para los que dispongan de acceso root, es la aplicación ab(Apache Benchmarking), esta es una herramienta para realizar pruebas de un servidor Apache.

Esta diseñado para dar una impresión de como es la instalación de tu servidor web Apache, también muestra el números de peticiones que se puede realizar en un segundo.

Para mas información sobre ab: http://httpd.apache.org/docs/current/programs/ab.html

Fichero Final

Copia en el fichero .htaccess en el directorio raíz de tu sitio web y disfruta de las mejoras en el rendimiento.

<ifModule mod_deflate.c>
  AddOutputFilterByType DEFLATE text/html text/xml text/css text/plain
  AddOutputFilterByType DEFLATE image/svg+xml application/xhtml+xml application/xml
  AddOutputFilterByType DEFLATE application/rdf+xml application/rss+xml application/atom+xml
  AddOutputFilterByType DEFLATE text/javascript application/javascript application/x-javascript application/json
  AddOutputFilterByType DEFLATE application/x-font-ttf application/x-font-otf
  AddOutputFilterByType DEFLATE font/truetype font/opentype
</ifModule>
<ifModule mod_expires.c>
  ExpiresActive On
  ExpiresDefault "access plus 5 seconds"
  ExpiresByType image/x-icon "access plus 2592000 seconds"
  ExpiresByType image/jpeg "access plus 2592000 seconds"
  ExpiresByType image/png "access plus 2592000 seconds"
  ExpiresByType image/gif "access plus 2592000 seconds"
  ExpiresByType application/x-shockwave-flash "access plus 2592000 seconds"
  ExpiresByType text/css "access plus 604800 seconds"
  ExpiresByType text/javascript "access plus 216000 seconds"
  ExpiresByType application/javascript "access plus 216000 seconds"
  ExpiresByType application/x-javascript "access plus 216000 seconds"
  ExpiresByType text/html "access plus 600 seconds"
  ExpiresByType application/xhtml+xml "access plus 600 seconds"
</ifModule>
<ifModule mod_headers.c>
  <filesMatch "\.(ico|jpe?g|png|gif|swf)$">
    Header set Cache-Control "public"
  </filesMatch>
  <filesMatch "\.(css)$">
    Header set Cache-Control "public"
  </filesMatch>
  <filesMatch "\.(js)$">
    Header set Cache-Control "private"
  </filesMatch>
  <filesMatch "\.(x?html?|php)$">
    Header set Cache-Control "private, must-revalidate"
  </filesMatch>
</ifModule>
FileETag None
Fuente: Jean Paul Beaudry axarnet

Un comentario sobre “Web: Mejorar el rendimiento de nuestro sitio mediante .htaccess – Hosting Linux”

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *