Brotli es un algoritmo de compresión de datos sin pérdida desarrollado por Google . Utiliza una combinación del algoritmo de compresión sin pérdida LZ77 de propósito general , codificación Huffman y modelado de contexto de segundo orden . Brotli es utilizado principalmente por servidores web y redes de distribución de contenido para comprimir contenido HTTP , lo que hace que los sitios web de Internet se carguen más rápido. Es un sucesor de gzip , es compatible con todos los navegadores web principales y se ha vuelto cada vez más popular, ya que proporciona una mejor compresión que gzip. [ cita requerida ]
Los empleados de Google Jyrki Alakuijala y Zoltán Szabadka desarrollaron inicialmente Brotli en 2013 para reducir el tamaño de las transmisiones de la fuente web WOFF . [2] Alakuijala y Szabadka completaron la especificación Brotli durante 2013-2016. La especificación fue acompañada con una implementación de referencia desarrollada por dos autores adicionales, Evgenii Kliuchnikov y Lode Vandevenne, quienes previamente habían desarrollado la implementación zopfli de Google de compresión compatible con deflate y gzip en 2013. [3] : 1 A diferencia de zopfli, que era una reimplementación de una especificación de formato de datos existente, Brotli era un nuevo formato de datos y permitió a los autores mejorar aún más las tasas de compresión. [4]
La especificación Brotli se generalizó en septiembre de 2015 para la compresión de flujos HTTP (tipo de codificación de contenido "br"). Esta iteración generalizada también mejoró la tasa de compresión al utilizar un diccionario predefinido de palabras y frases de uso frecuente. La versión de Brotli lanzada en septiembre de 2015 por los ingenieros de software de Google contenía mejoras en la compresión de datos sin pérdida genérica , con especial énfasis en el uso para la compresión HTTP . El codificador se reescribió parcialmente, con el resultado de que la tasa de compresión mejoró, tanto el codificador como el decodificador se aceleraron, se mejoró la API de transmisión y se agregaron más niveles de calidad de compresión. Además, la nueva versión muestra mejoras de rendimiento en todas las plataformas, con una reducción de la memoria de decodificación. [4]
El Grupo de Trabajo de Ingeniería de Internet aprobó la especificación del formato de datos comprimidos Brotli como una solicitud informativa de comentarios ( RFC 7932) en julio de 2016. [5] El formato de datos Brotli es una parte integral de la segunda iteración del Web Open Font Format , [5] : 3 que fue reconocido en un Premio Emmy de Tecnología e Ingeniería 2021 de la Academia Nacional de Artes y Ciencias de la Televisión por la estandarización de la tecnología de fuentes en W3C. [6] [7]
A lo largo de los años, se ha ido añadiendo compatibilidad con Brotli a los navegadores web, y el 96 % de los usuarios de todo el mundo utilizan un navegador compatible con el formato, a julio de 2022. [8]
En 2016, Dropbox volvió a implementar Brotli en Rust para cumplir con su requisito de ser más seguro contra un cliente malicioso. [9] [10]
El nuevo formato de archivo de Brotli permite a sus autores mejorar Deflate mediante varias mejoras algorítmicas y a nivel de formato: el uso de modelos de contexto para literales y distancias de copia, la descripción de distancias de copia a través de distancias pasadas, el uso de una cola de movimiento al frente en la selección de código de entropía, la codificación de entropía conjunta de longitudes de literales y copias, el uso de algoritmos gráficos en la división de bloques y una ventana de referencia hacia atrás más grande son ejemplos de mejoras.
A diferencia de la mayoría de los algoritmos de compresión de propósito general, Brotli utiliza un diccionario predefinido, de aproximadamente 120 KiB de tamaño, además del diccionario de relleno dinámico ("ventana deslizante"). El diccionario predefinido contiene más de 13000 palabras comunes, frases y otras subcadenas derivadas de un gran corpus de texto y documentos HTML. [11] [3] Se ha demostrado que el uso de un diccionario predefinido aumenta la compresión cuando un archivo contiene principalmente palabras de uso común. [12] La ventana deslizante de Brotli está limitada a 16 MiB . Esto permite la decodificación en teléfonos móviles con recursos limitados, pero hace que Brotli tenga un rendimiento inferior en los puntos de referencia de compresión que tienen archivos más grandes. Las limitaciones del tamaño pequeño de la ventana se pueden aliviar utilizando Large Window Brotli , que no es compatible con RFC7932 (Brotli propiamente dicho). [13]
Mientras que la implementación zopfli de Google del algoritmo de compresión deflate recibe su nombre de Zöpfli, la palabra suizo-alemana para un pan trenzado con mantequilla del tamaño de un bocadillo , brotli recibe su nombre de Brötli, la palabra suizo-alemana para un panecillo . [4] La propia implementación de Google de la especificación Brotli se publicó bajo los términos de la licencia permisiva de software libre MIT en 2016. Una validación formal de la especificación Brotli fue implementada de forma independiente por Mark Adler , [5] : 126 uno de los coautores del formato y la biblioteca de compresión zlib / gzip . La implementación de Adler se publicó bajo los términos de la licencia Apache igualmente permisiva . [14] También existen otras implementaciones de la especificación, incluida una en el lenguaje Haxe de fuente a fuente .
La compresión Brotli se utiliza generalmente como una alternativa a gzip en la web, ya que Brotli proporciona una mejor compresión general. [15] En comparación con la compresión gzip, los archivos JavaScript comprimidos con Brotli son aproximadamente un 15 % más pequeños, los archivos HTML son alrededor de un 20 % más pequeños y los archivos CSS son alrededor de un 16 % más pequeños. [16]
La implementación de referencia incluye un programa de línea de comandos brotli
similar a gzip
, [17] pero su uso en el mundo de tipo Unix como un simple compresor es escaso. Los desarrolladores de Libarchive encuentran difícil admitir el formato de flujo de .br
archivos sin procesar, ya que no existe un número mágico que indique el formato de archivo. [18]
Actualmente estamos probando la extensión "Large Window Brotli" que permitirá ventanas de hasta 1 GiB. [...] "Large Window Brotli" ya está disponible.
Sin una firma mágica, libarchive no puede reconocer automáticamente el tipo de archivo, por lo que no puede descomprimirlo automáticamente. (Libarchive no tiene en cuenta el nombre del archivo, solo el contenido).