Optimización: Utilizar compresión Gzip

Para optimizar la carga de una página web es necesario disminuir al máximo el número de peticiones o el tamaño de los archivos transmitidos. Para ayudar al ahorro de transferencia los servidores web han implementado formas de compresión, mediante la cual el contenido es comprimido antes de enviarlo al browser.

En la actualidad la mayoría de los browsers soportan dos formatos de compresión, ello lo podemos observar en los headers que envía el browser al hacer una petición. En la propiedad Accept-Encoding con dos valores:

  • gzip es un formato de compresión libre, desarrollado por el proyecto GNU, es el mas popular pues la mayoría de los browsers lo soportan, además ofrece un ahorro del 66% en promedio.
  • deflate menos efectivo que gzip pues ofrece un ahorro de 60%, uno de los pocos sitios que lo utiliza es msn.com.

Que archivos comprimir con GZIP

Es recomendable comprimir solo los archivos html, php, css, js y algunos otros archivos en formato texto. En el caso de archivos jpg, png, gif, pdf estos ya están comprimidos y aplicarle gzip puede incrementar el tamaño de los archivos e incluso el consume de CPU del servidor. Otra regla que hay que tener en cuenta es que se recomienda comprimir archivos de mas de 1Kb.

Utilizar GZIP con Apache 1.3

En el caso de Apache 1.3 la compresión gzip es manejada por el módulo mod_gzip. Para ello se pueden utilizar las sentencias mod_gzip_item_include para incluir archivos a comprimir y mod_gzip_item_exclude para excluir archivos. Luego editamos el archivo .htaccess e incluimos el siguiente código.

  1. <IfModule mod_gzip.c>
  2. mod_gzip_on Yes
  3. mod_gzip_item_include file \.html$
  4. mod_gzip_item_include file \.php$
  5. mod_gzip_item_include file \.css$
  6. mod_gzip_item_include file \.js$
  7.  
  8. mod_gzip_item_include mime ^application/javascript$
  9. mod_gzip_item_include mime ^application/x-javascript$
  10. mod_gzip_item_include mime ^text/.*
  11. mod_gzip_item_include handler ^application/x-httpd-php
  12.  
  13. mod_gzip_item_exclude mime ^image/.*
  14. </IfModule>

Utilizar GZIP con Apache 2.x

Para versiones de Apache 2.x la compresión es gestionada por el módulo mod_deflate (No confundir el nombre del módulo con la compresión, pues esta genera compresión gzip). Para comprimir los archivos podemos utilizar la sentencia AddOutputFilterByType de la siguiente forma:

  1. AddOutputFilterByType DEFLATE text/html text/css application/x-javascript

En nuestro caso tenemos Apache 2.0.54 por lo cual aplicamos el segundo método. Hemos creados dos ejemplos uno sin compresión (http://samples.unijimpe.net/optimization/no-gzip/), en el cual podemos observar que toda la pagina tiene un tamaño de 135.4 Kb y demora en cargar 3.46 segundos.

Ahora si agregamos la compresión gzip (http://samples.unijimpe.net/optimization/gzip/) podemos observar una reducción significante en el tamaño de los archivos. Ahora toda la página tiene un tamaño de 38.8KB con lo cual hemos ahorrado un 71.3%.

Mas Información
Se puede habilitar la compresión con PHP e incluso controlar mas al detalle la compresión de los archivos, para ello les dejo algunos enlaces para encontrar mas información.

Posts Relacionados

Comentarios Total 3 comentarios


jorge
Publicado: 02/02/2010 5:48 am

Hola. Es la primera vez que posteo, pero desde hace un tiempo que estoy agregado para recibir las novedades, muy bárbara la información.

Sobre este tema, estoy interesado en agregar a mi Apache 2.2 lo que comentas, pues algunas de las webs que programo tienen scripts y css “pesados”.

Lo que no llego a entender es donde meter, por ejemplo, la sentencia AddOutputFilterByType. ¿Es parte del htdocs?¿o es la única línea que tengo que meter en un .htaccess en el raíz del sitio?. Te comento que no tengo la raíz de directorios en htdocs, sino que mediante el vhosts asigno los directorios.

He querido ver en la página de apache, pero tampoco lo he tenido muy claro

Gracias!

unijimpe
Publicado: 02/02/2010 9:45 am

Para activar la compresión GZIP debes crear un archivo llamado .htaccess el cual debes colocar en la raiz de tu servidor web, es decir en la carpeta donde publicas tus archivos html, php, etc.

Ab Munguía
Publicado: 12/03/2010 1:03 pm

No se quiebren la cabeza tanto con el apache.

@ob_start(“ob_gzhandler”); al inicio es su amigo.

 

Comentar

En este blog los comentarios están moderados, no aparecerán inmediatamente en la página al ser enviados. Por favor, evita los comentarios ofensivos u obscenos por que no serán aprobados.

(Requerido)

(Requerido, no será publicado)

(Requerido)

(Tags aceptados: <a> <em> <strong> <code> <ul> <li>)