Brotli es una especificación de formato de datos [2] para flujos de datos comprimidos con una combinación específica del algoritmo de compresión sin pérdidas LZ77 de propósito general , codificación Huffman y modelado de contexto de segundo orden . Brotli es un algoritmo de compresión desarrollado por Google y funciona mejor para la compresión de texto. Brotli es utilizado principalmente por servidores web y redes de entrega de contenido para comprimir contenido HTTP, lo que hace que los sitios web de Internet se carguen más rápido. Un sucesor de gzip, es compatible con los principales navegadores web y se está volviendo cada vez más popular, ya que proporciona una mejor compresión que gzip.
Autor (es) original (es) | Jyrki Alakuijala, Zoltán Szabadka |
---|---|
Desarrollador (es) | Jyrki Alakuijala, Eugene Kliuchnikov, Robert Obryk, Zoltán Szabadka, Lode Vandevenne |
Versión inicial | 15 de octubre de 2013 |
Lanzamiento estable | 1.0.9 / 27 de agosto de 2020 [1] |
Repositorio | |
Escrito en | C |
Sistema operativo | Multiplataforma |
Plataforma | Portátil |
Tipo | Compresión de datos |
Licencia | Licencia MIT |
Sitio web | github |
Historia
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 . 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 fue una reimplementación de un Especificación de formato de datos existente, Brotli era un nuevo formato de datos y permitió a los autores mejorar aún más los índices de compresión. [4] La especificación Brotli se generalizó en septiembre de 2015 para la compresión de flujo HTTP (tipo de codificación de contenido 'br').
El Grupo de Trabajo de Ingeniería de Internet aprobó la especificación del formato de datos comprimidos Brotli como una solicitud informativa para comentarios (RFC 7932) en julio de 2016. [2] El formato de datos Brotli es una parte integral de la segunda iteración del formato de fuente abierta web . [2] : 3
El soporte de Brotli se ha agregado a lo largo de los años a los navegadores web, y el 94% de los usuarios de todo el mundo utilizan un navegador que admite el formato, a partir de marzo de 2021. [5]
Acerca de
Brotli se lanzó por primera vez en 2013 para la compresión fuera de línea de fuentes web . [6] Brotli fue una continuación del desarrollo de zopfli , que es una implementación compatible con zlib de las especificaciones estándar gzip y deflate . Brotli permite un empaquetado más denso que gzip y deflate debido a varias mejoras algorítmicas y de nivel de formato: el uso de modelos de contexto para literales y distancias de copia, descripción de distancias de copia a través de distancias pasadas, uso de cola de movimiento al frente en la selección de código de entropía, unión La codificación de entropía de longitudes de copia y literal, el uso de algoritmos de gráficos en la división de bloques y una ventana de referencia hacia atrás más grande son ejemplos de mejoras.
La especificación Brotli se generalizó en septiembre de 2015 para la compresión de flujo HTTP (tipo de codificación de contenido 'br'). Esta iteración generalizada también mejoró la relación de compresión mediante el uso de 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 genérica sin pérdidas , con especial énfasis en el uso de la compresión HTTP . El codificador se reescribió parcialmente, con el resultado de que la relación de compresión mejoró, se aceleraron tanto el codificador como el decodificador, 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 reducción de la memoria de decodificación. [4]
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 dinámicamente poblado ("ventana deslizante"). El diccionario predefinido contiene más de 13000 palabras, frases y otras subcadenas comunes derivadas de un gran corpus de documentos de texto y HTML. [7] [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. [8]
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).
Los flujos comprimidos con Brotli tienen el tipo de codificación de contenido "br".
Mientras que la implementación zopfli de Google del algoritmo de compresión desinflada lleva el nombre de zöpfli, la palabra en alemán suizo para un pan con mantequilla trenzado del tamaño de un bocadillo , brotli lleva el nombre de brötli, la palabra en alemán suizo 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. Mark Adler implementó de forma independiente una validación formal de la especificación Brotli , cf. [2] : 126 uno de los coautores del formato de compresión y biblioteca zlib / gzip . La implementación de Adler fue lanzada bajo los términos de la licencia Apache igualmente permisiva . [9] También existen otras implementaciones de la especificación, incluida una en el lenguaje haxe de fuente a fuente .
Brotli está disponible como un puerto para Android en una interfaz de terminal con su propia biblioteca compartida . [10]
La compresión Brotli se usa generalmente como una alternativa a gzip, ya que Brotli proporciona una mejor compresión general. [11] 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 aproximadamente un 20% más pequeños y los archivos CSS son aproximadamente un 16% más pequeños. [12]
Soporte de la industria
Navegadores y otros clientes
- Mozilla Firefox introdujo soporte para el método de codificación de contenido 'br' en la versión 44 (lanzada el 26 de enero de 2016). [13]
- Google Chrome admite el método de codificación de contenido 'br' desde la versión 50 (lanzada el 20 de abril de 2016). [14]
- Opera ha admitido el método de codificación de contenido 'br' desde la versión 38 (lanzada el 8 de junio de 2016). [14]
- Microsoft Edge ha admitido el método de codificación de contenido 'br' desde la versión 15 (lanzada el 5 de abril de 2017). [15]
- Safari ha admitido el método de codificación de contenido 'br' desde la versión 11 (lanzada el 5 de octubre de 2017).
- cURL tiene una opción en tiempo de compilación para admitir el método de codificación de contenido 'br' utilizando libbrotli a partir de la versión 7.57, publicada el 29 de noviembre de 2017. [16]
- 7zip está disponible ampliado con Brotli por 7zip-zstd. [17]
Servidores web
- Para el servidor HTTP Apache , el método de codificación de contenido 'br' ha sido compatible con el módulo mod_brotli desde la versión 2.4.26. [18]
- Microsoft IIS tiene una extensión compatible con [1] desde mayo de 2018 que agrega compatibilidad con el método de codificación de contenido 'br'.
- nginx tiene un módulo ngx_brotli proporcionado por Google desde diciembre de 2016.
- Node.js cuenta con un codificador y decodificador nativo integrado desde la versión 11.7.0, que se puede usar para admitir la codificación de contenido 'br'.
- Amazon CloudFront puede comprimir automáticamente las respuestas almacenables en caché en el borde utilizando Brotli, a partir de septiembre de 2020. [19]
- LiteSpeed Web Server ha incluido el método de codificación de contenido 'br' para archivos estáticos solo desde la versión 5.2 en julio de 2017.
- Cloudflare CDN ofrece una opción brotli para comprimir datos entre su nodo de borde y el usuario. [20]
- NaviServer agregó soporte en la versión 4.99.17b1
- Caddy (servidor web) Sirve archivos .br comprimidos estáticamente desde la versión 0.9.4 del 21 de diciembre de 2016.
- lighttpd mod_deflate admite .br desde 1.4.56 [21] a partir de noviembre de 2020.
Referencias
- ^ "Lanzamientos - google / brotli" . Consultado el 13 de septiembre de 2020 , a través de GitHub .
- ^ a b c d Alakuijala, Jyrki; Szabadka, Zoltan (2016), RFC 7932: Formato de datos comprimidos Brotli , Solicitud de comentarios del Grupo de trabajo de ingeniería de Internet, Fremont, CA: IETF Trust.
- ^ a b Alakuijala, Jyrki; Kliuchnikov, Evgenii; Szabadka, Zoltan; Vandevenne, Lode (22 de septiembre de 2015), "Comparación de algoritmos de compresión Brotli, Deflate, Zopfli, LZMA, LZHAM y Bzip2" (PDF) , The Comprehensive R Archive Network , r-project.org.
- ^ a b c Szabadka, Zoltan (22 de septiembre de 2015), "Introducción a Brotli: un nuevo algoritmo de compresión para Internet" , Blog de código abierto de Google , Mountain View, CA: opensource.googleblog.com.
- ^ "¿Puedo usar ... - Brotli" . 2021-03-07.
- ^ Sheeter, Rod (18 de febrero de 2015), "Fuentes más pequeñas con WOFF 2.0 y rango Unicode" , Blog de código abierto de Google , Mountain View, CA: opensource.googleblog.com
- ^ Chirgwin, Richard (23 de septiembre de 2015), "El nuevo apretón de Google: compresión Brotli de código abierto" , The Register , theregister.co.uk.
- ^ Larkin, Henry (2007). "Indexación de palabras para representaciones de datos de dispositivos móviles". 7º Congreso Internacional IEEE sobre Tecnología de la Información y la Computación (CIT 2007) . págs. 399–404. doi : 10.1109 / CIT.2007.22 . ISBN 978-0-7695-2983-7..
- ^ Adler, Mark (26 de enero de 2015), "Revisión y verificación de la especificación de Brotli" , Adler brotli , San Francisco: GitHub.
- ^ "Brotli como programa independiente para Android" . Consola maestra (Github) .
- ^ Calvano, Paul (25 de julio de 2018). "Compresión Brotli: ¿Cuánto reducirá su contenido?" . Consultado el 7 de marzo de 2021 .
- ^ Pandjarov, Hristo (13 de enero de 2021). "Más ganancias de velocidad del sitio con el algoritmo de compresión de Brotli" . SiteGround . Consultado el 7 de marzo de 2021 .
- ^ Goodger, Ben; et al. (26 de enero de 2016), "Notas de la versión de Firefox 44" , Mozilla Firefox , Mozilla Foundation.
- ^ a b Baheux, Kenji (15 de enero de 2016), "Accept-encoding: br on HTTPS connection" , Chrome Platform Status , chromestatus.com.
- ^ Trace, Rob (20 de diciembre de 2016), "Introducción a la compresión Brotli en Microsoft Edge" , Microft Edge Developer , blogs.windows.com
- ^ Stenberg, Daniel; et al. "curl - Cambios" . curl.haxx.se . Consultado el 14 de enero de 2018 .
- ^ https://github.com/mcmilk/7-Zip-zstd
- ^ "Cambios con Apache 2.4.26" , repositorio HTTPD de Apache , svn.apache.org.
- ^ "Amazon CloudFront anuncia soporte para la compresión Brotli" . aws.amazon.com .
- ^ "¿Qué comprimirá Cloudflare?" . support.cloudflare.com .
- ^ "información de lanzamiento de lighttpd 1.4.56" . redmine.lighttpd.net .
- Notas
- - Finley, Klint (22 de septiembre de 2015), "Hooli, I Mean Google, Gives Away Compression Code for Free" , Wired Online , wired.com.
enlaces externos
- Implementación de referencia de Brotli en brotli en GitHub