En este post demostraré cómo comprimir contenido de texto en tus aplicaciones web o sitios web, para que el tamaño del tráfico sea menor y, en consecuencia, el tiempo de carga de tu aplicación sea menor.

Para ello utilizaremos el archivo de configuración del servidor web Apache, .htaccess. Recuerde que archivos como videos, música y otros archivos binarios probablemente ya estén comprimidos y, como generalmente tienen un tamaño mucho mayor que los archivos de texto, se requeriría mucho procesamiento del servidor para comprimirlos nuevamente y la ganancia de la compresión sería mínima.

Por este motivo, se recomienda activar la compresión sólo en archivos de texto, y especialmente en los “Big 3” (HTML, CSS y Javascript).

Habilitar la compresión con DEFLATE

Esta es la compresión más fácil de configurar en el servidor y ya está habilitada de forma predeterminada. Utiliza menos procesamiento del servidor que GZip, pero no comprime tanto.

<IfModule mod_deflate.c>

    # Compactar por tipo - html, text, css, xml
    AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml

    # Compactar por tipo - javascript
    AddOutputFilterByType DEFLATE application/x-javascript application/javascript text/javascript text/x-js text/x-javascript

    # Compactar por extensão
    AddOutputFilter DEFLATE js css htm html xml ttf eot

</IfModule>

Habilitando la compresión con GZip

GZip está ganando mucho espacio hoy en día en la Web debido a su gran poder de compresión de datos, reduciendo drásticamente los tiempos de carga de las páginas, especialmente cuando hablamos de Internet móvil (3G) en Brasil, que todavía es muy lento y precario en muchos lugares. Como presenta un alto nivel de compresión, requiere más procesamiento que el método de compresión DEFLATE.

<IfModule mod_gzip.c>
    mod_gzip_on       Yes
    mod_gzip_dechunk  Yes
    mod_gzip_item_include file      \.(html?|txt|css|js|php|pl|ttf|eot)$
    mod_gzip_item_include handler   ^cgi-script$
    mod_gzip_item_include mime      ^text/.*
    mod_gzip_item_include mime      ^application/x-javascript.*
    mod_gzip_item_exclude mime      ^image/.*
    mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</IfModule>