Gzip vs Brotli: qué método de compresión debería usar y por qué

Publicado: 2018-03-02

Gzip se convirtió en el estándar de oro para la compresión de archivos a principios de la década de 1990, pero si todavía lo está usando en 2018, es posible que desee considerar cambiar a un método de compresión más nuevo.

Aunque Gzip todavía tiene su lugar en el corazón de muchos, los desarrolladores web recurren cada vez más a opciones superiores como el algoritmo de compresión Brotli de Google.

Una breve historia de la compresión de archivos

La "G" en Gzip es la abreviatura de GNU. GNU es un sistema operativo de código abierto basado en Unix que se desarrolló en la década de 1980. En ese momento, Unisys e IBM ya habían patentado sus propios algoritmos para comprimir y descomprimir archivos, lo que permitió que sus máquinas almacenaran más datos. Por lo tanto, los programadores Jean-loup Gailly y Mark Adler crearon Gzip como una alternativa gratuita para los usuarios de GNU.

El nuevo Gzip no era solo una imitación barata; en realidad fue más rápido que sus competidores con derechos de autor. Como resultado, la gente todavía lo usa para comprimir archivos hasta el día de hoy. Si bien es fácil quedarse con lo que se siente cómodo, existen varios algoritmos de compresión que actualmente brindan mejores resultados de compresión que Gzip. Ahí es donde entra Brotli.

¿Qué es Brotli?

Brotli es una especificación de formato de datos más reciente que aprovecha múltiples algoritmos para condensar datos de manera más eficiente que Gzip. En 2015, la especificación Brotli se generalizó para la compresión de secuencias HTTP con el tipo de codificación de contenido 'br'.

Brotli Content Encoding

Desarrollado por Jyrki Alakuijala y Zoltan Szabadka, Brotli usa los mismos algoritmos de compresión que Gzip, pero también cuenta con el respaldo de un diccionario de palabras y frases de uso frecuente para brindar una mejor relación de compresión.

Tenga en cuenta que Gzip y Brotli solo deben usarse para comprimir archivos de texto. Los archivos binarios como JPEG y MP4 se basan en sus propios algoritmos de compresión específicos del formato. Si intenta comprimir un archivo JPEG con Brotli, el archivo resultante será más grande que el original.

Aunque no siempre fue así, Brotli ahora es compatible con todos los principales navegadores.

Brotli Support

En el caso de que un navegador que no sea compatible con Brotli solicite un activo de un sitio que entregue archivos comprimidos con Brotli, el servidor recurrirá a Gzip y entregará activos codificados compatibles con el navegador, siempre que el servidor esté configurado correctamente.

¿Qué hace que Brotli sea mejor?

Según una investigación realizada por CertSimple:

  • Los paquetes de JavaScript comprimidos con Brotli son un 14 % más pequeños que los paquetes de JavaScript comprimidos con Gzip.
  • Los archivos HTML comprimidos por Broti son un 21 por ciento más pequeños que sus equivalentes Gzip.
  • Los archivos CSS comprimidos por Brotli son un 17 por ciento más pequeños que los comprimidos por Gzip.

Dado que la mayoría de los sitios web se basan en estos tres tipos de activos, esa es una diferencia considerable en el tamaño de los activos cuando se compara con Gzip. Estos ahorros, a su vez, harán una mejora notable en el rendimiento de su aplicación.

Gzip vs Brotli: sacar el máximo provecho de Brotli

A pesar de lo que haya escuchado, comprimir recursos con Brotli no es más lento que con Gzip. Dicho esto, Gzip y Brotli ofrecen niveles variables de compresión, y la configuración predeterminada de Brotli puede resultar en una compresión más lenta que la configuración predeterminada de Gzip. Deberá realizar algunos ajustes en Brotli para lograr un equilibrio aceptable entre el tamaño del archivo y la velocidad de compresión.

La configuración de compresión ideal depende de qué y cuándo esté comprimiendo. Un buen punto de partida es Brotli 4 para una compresión más rápida de contenido dinámico. Por otro lado, los activos estáticos se pueden comprimir más densamente de antemano sin sacrificar la velocidad, por lo que la configuración predeterminada de "11" es más adecuada para dicho contenido.

Instalación de Brotli en su servidor web

Agregar soporte para Brotli proporciona ganancias significativas con un esfuerzo mínimo. Según el software de servidor web que esté utilizando, se determinará qué método de integración deberá utilizar para integrar Brotli. A continuación se describen algunas opciones disponibles:

  • Nginx tiene una extensión Brotli ofrecida por Google.
  • Apache ofrece una extensión Brotli dedicada.
  • Microsoft IIS no ofrece ningún soporte oficial de Brotli, sin embargo, hay un módulo comunitario que agrega soporte.
  • Node.js es similar a Microsoft en que no hay soporte oficial, sin embargo, hay un módulo comunitario.

Para demostrar un ejemplo de instalación rápida, supongamos que está ejecutando Nginx. En ese caso, puede instalar el módulo ngx_brotli con lo siguiente:

cd nginx-1.x.x
$ ./configure --add-module=/path/to/ngx_brotli
$ make && make install

A continuación, agregue lo siguiente al bloque HTTPS (Brotli solo se ejecuta en HTTPS):

brotli on;
brotli_static on;
brotli_comp_level 4;
brotli_types text/plain text/css application/javascript application/json image/svg+xml application/xml+rss;

Puede modificar las directivas anteriores como mejor le parezca.

Finalmente, ingrese lo siguiente para reiniciar NGINX y comenzar a cosechar los beneficios:

sudo systemctl restart nginx
Uso de Brotli con activos precomprimidos

Brotli es excelente para entregar activos precomprimidos mucho más rápido que Gzip. Esto se debe al hecho de que puede comprimirlos al nivel más alto de Brotli (11) y luego hacer que el servidor de origen los recoja cuando se le solicite.

Este tipo de configuración funciona muy bien con Webpack, ya que hay un complemento de Webpack disponible para comprimir automáticamente sus activos estáticos como Gzip y Brotli. Por lo tanto, no se requiere compresión sobre la marcha, lo que significa que se ahorra el tiempo que de otro modo se dedicaría a comprimir los archivos.

Obtenga más información sobre cómo usar Webpack para generar recursos comprimidos con Brotli.

¿Su CDN es compatible con Brotli?

Para aprovechar al máximo los beneficios de Brotli, necesita una red de entrega de contenido que lo admita. KeyCDN, por ejemplo, introdujo el soporte de Brotli el año pasado para todos los clientes sin costo adicional. Por lo tanto, su sitio no solo se beneficiará de tamaños de archivo reducidos gracias a una mejor compresión de Brotli, sino que también se beneficiará de una latencia reducida gracias a que los activos se almacenan en caché en servidores perimetrales más cercanos a sus visitantes.

Este método requiere que su servidor de origen admita Brotli y que la compresión real ocurra en el lado del servidor de origen. Una vez más, esto ayuda a ahorrar tiempo y evita la necesidad de una compresión sobre la marcha que puede perjudicar el rendimiento.

Gzip vs Brotli: en resumen

La pequeña cantidad de esfuerzo requerida para agregar Brotli a su servidor web bien vale la pena por los ahorros sustanciales en el tamaño del archivo. Aunque Brotli a veces puede funcionar más lento en su configuración de compresión más alta, puede lograr fácilmente un equilibrio ideal entre la velocidad de compresión y el tamaño del archivo ajustando la configuración.

Si bien el uso de Brotli puede convertir aplicaciones web rápidas en otras más rápidas, no necesariamente hará que las aplicaciones lentas sean rápidas. Dado que Brotli solo comprime activos basados ​​en texto, deberá optimizar sus imágenes por otros medios. Si aún tiene que dar el salto a HTTP/2, hacerlo puede marcar una gran diferencia en el rendimiento de su aplicación. Cada milisegundo cuenta, por lo que cualquier acción que realice para acelerar su aplicación mejora sus posibilidades de retener a los usuarios.