Compresión GZIP y Brotli: acelere la velocidad de los sitios web con solo habilitarlos en su servidor

¿Sabía usted que al utilizar algoritmos de compresión de datos, puede reducir el tamaño de los archivos y lograr una mayor velocidad en los sitios web?

La compresión de datos es una de las tantas estrategias que puede emplear para mejorar el tiempo de carga de sitios; actualmente existen varios métodos de comprensión, como GIZP y Brotli.


En este artículo le explicaremos cómo funcionan estos dos algoritmos de compresión y cuál es el más recomendado; además, le proporcionaremos información para habilitar el sistema de comprensión más moderno en servidores Apache y Nginx. ¡Comencemos!

Comprensión de datos para la web: ¿Por qué es importante habilitar algoritmos como Gzip o Brotli?

Cuando un usuario accede a un sitio web, el navegador envía una petición HTTP al servidor. El servidor responde enviando los archivos necesarios para renderizar la página en el navegador del usuario, incluyendo HTML, CSS, JavaScript, imágenes u otro tipo de contenido.

El tamaño de estos archivos impactan directamente en la velocidad del sitio, lo que puede conducir a una experiencia lenta, especialmente en dispositivos móviles, ¡y aquí es donde las técnicas de comprensión de datos puede ayudarlo!

habilitar algoritmos como Gzip o Brotli

La compresión de datos es el proceso de reducir el tamaño de los archivos antes de ser enviados al navegador del usuario. Esto se logra mediante el uso de sistemas de compresión como GZIP o Brotli; estos mecanismos incluyen algoritmos que permiten identificar patrones repetitivos en los datos y los reemplazan por referencias más cortas, lo que resulta en archivos más pequeños.

¿Qué es GZIP y cómo funciona?

GZIP es uno de los sistemas de comprensión más populares para reducir el tamaño de los archivos antes de que se transmitan del servidor al cliente. Fue desarrollado en 1992 por Jean-loup Gailly y Mark Adler, y su nombre proviene de la combinación de las palabras "GNU" (en referencia al proyecto de software libre GNU) y "zip".

Se basa en el algoritmo “deflate”, una combinación de los algoritmos LZ77 (Lempel-Ziv 77) y huffman. A través de estos algoritmos, GZIP identifica y codifica secuencias de caracteres que se repiten con frecuencia en los archivos seleccionados. En lugar de transmitir repetidamente los mismos datos, GZIP reemplaza estas secuencias por códigos más cortos, lo que reduce el tamaño del archivo comprimido.

Según la documentación oficial, el porcentaje de compresión depende del tamaño de la entrada y la distribución de cadenas repetidas; generalmente textos como el código fuente se reducen en un 60% y 70%, lo que resulta en tiempos de carga más rápidos y en un uso más eficiente del ancho de banda.

¡Se recomienda como mínimo habilitar GZIP en el servidor donde estará alojado el sitio!

En este punto conviene destacar que GZIP fue desarrollado en un principio para la compresión de archivos y posteriormente se ajustó para ser aplicable en el entorno web. Sin embargo, en 2013 fue desarrollado un nuevo algoritmo de compresión llamado Brotli, diseñado específicamente para la web.

Brotli: una alternativa a GZIP que ofrece mayor tasa de compresión

Brotli es un algoritmo de compresión de datos desarrollado por Google bajo una licencia MIT. El nombre "Brotli" proviene del gaélico escocés, que significa "pan pequeño", en sintonía con su objetivo de crear archivos de datos más pequeños.

De acuerdo a la documentación, Brotli es un algoritmo que permite comprimir datos mediante una combinación de una variante moderna del algoritmo LZ77, codificación Huffman y modelado de contexto de segundo orden, para identificar y eliminar redundancias en los datos. Cuenta con una relación de compresión comparable a los mejores métodos de compresión de propósito general disponibles actualmente, incluso en el siguiente estudio se demuestra que Brotli supera a los demás sistemas: Compresión de texto en R: brotli, gzip, xz y bz2.

¿Por qué Brotli es mejor que Gzip?

Brotli usa los mismos algoritmos de GZIP, pero utiliza métodos más modernos para mejorar la compresión, incorporando una técnica de codificación de diccionario que permite la reutilización de secuencias comunes en diferentes partes del archivo. Para ello, el diccionario cuenta con una gran cantidad de palabras comunes, frases y cadenas de texto HTML.

De esta manera, el uso de diccionarios permite lograr una mayor tasa de compresión y reducir el tiempo de carga de un sitio web. De acuerdo a un estudio realizado por CloudFlare, en promedio, Brotli en la configuración de calidad máxima produce resultados 1,19 veces más pequeños que zlib (una biblioteca de GZIP) en la calidad máxima. Para archivos de menos de 1 KB, el resultado es 1,38 veces más pequeño en promedio. Esto se atribuye principalmente al uso de diccionarios.

Por otro lado, ambos sistemas cuentan con niveles de compresión. En el caso de Gzip, este algoritmo cuenta con 9 niveles de compresión, mientras que Brotli cuenta con 11, lo que le permite ofrecer un mayor margen para ajustar la relación entre velocidad y compresión, a diferencia de GZIP. Es importante mencionar que, a mayor nivel de compresión, los costos computacionales aumentan. Por lo tanto, se recomienda elegir el nivel de comprensión de acuerdo al contenido que se servirá. Según un artículo de Cloudflare, el nivel 4 de compresión de brotli puede ofrecer un equilibrio entre el ahorro de bytes y el tiempo de compresión sin afectar el rendimiento, especialmente para contenido dinámico.

Ahora, hablemos sobre la compatibilidad de Brotli. De acuerdo al sitio web Can I use, más del 96% de los navegadores usan compresión Brotli, lo que nos permite inferir que Brotli es soportado por la mayoría de los navegadores populares en sus últimas versiones.

uso global brotli

¿Cómo habilitar la compresión Brotli en servidores apache?

Para habilitar este algoritmo de compresión en un servidor apache, siga los siguientes pasos:

1. Inicialmente, ejecute el comando que se indica a continuación, con el fin de asegurarse de que su servidor tenga el módulo mod_brotli instalado y habilitado: 

sudo a2enmod brotli

Abra su archivo de configuración y agregue las siguientes líneas de código para habilitar la compresión Brotli:

<IfModule mod_brotli.c>
AddOutputFilterByType BROTLI_COMPRESS text/html text/plain text/xml text/css text/javascript application/javascript application/x-javascript application/json application/xml
BrotliCompressionQuality 4
</IfModule>

3. Guarde los cambios y reinicie el servidor:

sudo systemctl restart apache2 
# or
sudo service apache2 restart

Puede leer más información aquí.

¿Cómo habilitar la compresión Brotli en servidores Nginx?

Si su servidor es Nginx siga los siguientes pasos: 

1. Instale el módulo Brotli utilizando un administrador de paquetes, para ello primero use el siguiente comando: 

sudo apt update

2. Y luego instale Nginx con el módulo Brotli:

sudo apt install nginx nginx-module-brotli

3. habilite la compresión Brotli desde su archivo de configuración de Nginx( generalmente ubicado en /etc/nginx/nginx.conf):

brotli on;
brotli_comp_level 4;
brotli_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript;

4. Guarde los  cambios

sudo nginx -t && sudo nginx -s reload

Puede leer más información aquí.

Con estas configuraciones, no solo habrá habilitado la compresión de Brotli en su servidor, sino que también establece el nivel de comprensión requerido (noté que para ambos casos se indicó un nivel 4).