Бротли
![]() | |
Оригинальный автор(ы) | Юрки Алакуйала, Золтан Сабадка |
---|---|
Разработчик(и) | Юрки Алакуйала, Евгений Ключников, Роберт Обрик, Золтан Сабадка, Лоде Вандевенн |
Первоначальный выпуск | 15 октября 2013 г |
Стабильная версия | 1.1.0 [1] ![]() |
Репозиторий | |
Написано в | С |
Операционная система | Кросс-платформенный |
Платформа | Портативный |
Тип | Сжатие данных |
Лицензия | МОЯ лицензия |
Веб-сайт | бротли |
Brotli — алгоритм сжатия данных без потерь, разработанный Google . Он использует комбинацию общего назначения LZ77 алгоритма сжатия без потерь , кодирования Хаффмана и контекстного моделирования 2-го порядка . Brotli в основном используется веб-серверами и сетями доставки контента для сжатия HTTP-контента , что ускоряет загрузку интернет-сайтов. Преемник gzip , он поддерживается всеми основными веб-браузерами и становится все более популярным, поскольку обеспечивает лучшее сжатие, чем gzip. [ нужна ссылка ]
История [ править ]
Сотрудники Google Юрки Алакуйала и Золтан Сабадка изначально разработали Brotli в 2013 году, чтобы уменьшить размер передаваемых веб-шрифтов WOFF . [2] Алакуйала и Сабадка завершили разработку спецификации Бротли в 2013–2016 годах. Спецификация сопровождалась эталонной реализацией, разработанной двумя дополнительными авторами, Евгением Ключниковым и Лоде Вандевенном, которые ранее в 2013 году разработали zopfli реализацию от Google для сжатия, совместимого с deflate и gzip . [3] : 1 В отличие от zopfli, который представлял собой повторную реализацию существующей спецификации формата данных, Brotli был новым форматом данных и позволял авторам еще больше улучшить степень сжатия. [4]
Спецификация Brotli была обобщена в сентябре 2015 года для сжатия потока HTTP (тип кодирования контента «br»). Эта обобщенная итерация также улучшила степень сжатия за счет использования предопределенного словаря часто используемых слов и фраз. Версия Brotli, выпущенная в сентябре 2015 года инженерами-программистами Google, содержала улучшения в стандартном сжатии данных без потерь , с особым акцентом на использование HTTP-сжатия . Кодер был частично переписан, в результате чего улучшилась степень сжатия, были ускорены как кодер, так и декодер, улучшен потоковый API и добавлено больше уровней качества сжатия. Кроме того, новая версия демонстрирует улучшение производительности на разных платформах за счет уменьшения памяти для декодирования. [4]
Инженерная группа Интернета одобрила спецификацию формата сжатых данных Brotli в качестве информационного запроса для комментариев ( RFC 7932 ) в июле 2016 г. [5] Формат данных Brotli является неотъемлемой частью 2-й версии формата Web Open Font Format . [5] : 3 который был отмечен премией «Эмми» в области технологий и инженерии 2021 года от Национальной академии телевизионных искусств и наук за стандартизацию технологии шрифтов на W3C. [6] [7]
Поддержка Brotli с годами добавлялась в веб-браузеры: по состоянию на июль 2022 года 96% пользователей во всем мире использовали браузер, поддерживающий этот формат. [8]
В 2016 году Dropbox повторно реализовал Brotli в Rust , чтобы выполнить требования по большей защите от вредоносного клиента. В 2018 году они реализовали недостающую функцию, позволяющую добавлять файлы в сжатый Brotli файл. [9] [10] [11]
Алгоритм [ править ]
Новый формат файла Бротли позволяет его авторам улучшить Deflate за счет нескольких улучшений алгоритмического и форматного уровня: использование контекстных моделей для литералов и расстояний копирования, описание расстояний копирования через прошлые расстояния, использование очереди перемещения вперед при выборе энтропийного кода. Примерами улучшений являются совместно-энтропийное кодирование литеральных и копийных длин, использование графовых алгоритмов при разделении блоков и увеличение окна обратной ссылки.
В отличие от большинства алгоритмов сжатия общего назначения, Бротли использует предопределенный словарь размером примерно 120 КиБ в дополнение к динамически заполняемому словарю («скользящее окно»). Предопределенный словарь содержит более 13 000 общих слов, фраз и других подстрок, полученных из большого массива текстовых и HTML-документов. [12] [3] Было показано, что использование предопределенного словаря увеличивает степень сжатия, если файл содержит в основном часто используемые слова. [13] Однако, по словам Алакуйялы, предопределенный словарь не отвлекает от общности Бротли и не является основной причиной улучшения сжатия. По его словам, Бротли с нулевым словарем по-прежнему хорошо работает с веб-контентом благодаря усовершенствованным алгоритмам. [14]
Размер скользящего окна Бротли ограничен 16 МБ . Это позволяет декодировать на мобильных телефонах с ограниченными ресурсами, но приводит к тому, что Бротли уступает в тестах сжатия с файлами большего размера. Ограничения небольшого размера окна можно облегчить, используя Large Window Brotli , который несовместим с RFC7932 (собственно Brotli). [15]
Имя [ править ]
В то время как реализация алгоритма сжатия Deflate от Google в zopfli названа в честь Zöpfli, швейцарско-немецкого размером с закуску слова, обозначающего плетеный хлеб с маслом , brotli названа в честь Brötli, швейцарско-немецкого слова, обозначающего булочку . [4] Собственная реализация спецификации Brotli от Google была выпущена в соответствии с условиями на бесплатное программное обеспечение разрешительной лицензии MIT в 2016 году. Формальная проверка спецификации Brotli была независимо реализована Марком Адлером , [5] : 126 один из соавторов формата и библиотеки сжатия zlib / gzip . Реализация Адлера была выпущена на условиях аналогичной разрешительной лицензии Apache . [16] Существуют и другие реализации спецификации, в том числе на языке Haxe с исходным кодом .
Приложения [ править ]
Сжатие Brotli обычно используется в Интернете как альтернатива gzip, поскольку Brotli обеспечивает лучшее общее сжатие. [17] По сравнению со сжатием gzip файлы JavaScript, сжатые с помощью Brotli, примерно на 15 % меньше, файлы HTML — примерно на 20 % меньше, а файлы CSS — примерно на 16 %. [18]
Эталонная реализация поставляется с программой командной строки. brotli
похоже на gzip
, [19] но использование в Unix-подобном мире в качестве простого компрессора встречается редко. Разработчики Libarchive находят формат необработанного потока .br
файлы сложно поддерживать, так как не существует магического числа, указывающего формат файла. [20]
Поддержка промышленности [ править ]
Браузеры и другие клиенты [ править ]
- Mozilla Firefox представил поддержку метода кодирования контента «br» в версии 44 (выпущенной 26 января 2016 г.). [21]
- Google Chrome поддерживает метод кодирования контента «br», начиная с версии 50 (выпущенной 20 апреля 2016 г.). [22]
- Opera поддерживает метод кодирования контента «br» начиная с версии 38 (выпущенной 8 июня 2016 г.). [22]
- Microsoft Edge поддерживает метод кодирования контента «br», начиная с версии 15 (выпущенной 5 апреля 2017 г.). [23]
- Safari поддерживает метод кодирования контента «br», начиная с версии 11 (выпущенной 5 октября 2017 г.).
- cURL имеет опцию времени компиляции для поддержки метода кодирования контента «br» с использованием libbrotli начиная с версии 7.57, выпущенной 29 ноября 2017 года. [24]
- 7zip доступен в расширенном виде с помощью Brotli от 7zip-zstd. [25]
- PeaZip поддерживает формат Brotli .BR для сжатия и извлечения. [26]
Веб-серверы [ править ]
- Для HTTP-сервера Apache метод кодирования контента «br» поддерживается модулем mod_brotli начиная с версии 2.4.26. [27]
- С мая 2018 года у Microsoft IIS есть поддерживаемое расширение, которое добавляет поддержку метода кодирования контента «br». [28]
- Microsoft Azure Front Door может динамически сжимать контент на периферии с помощью Brotli [29] с момента запуска 17 апреля 2019 года. [30]
- В nginx есть модуль ngx_brotli , предоставляемый Google с декабря 2016 года.
- Начиная с версии 11.7.0 Node.js имеет встроенный встроенный кодировщик и декодер, который можно использовать для поддержки кодирования контента «br».
- Amazon CloudFront может автоматически сжимать кэшируемые ответы на периферии с помощью Brotli, начиная с сентября 2020 г. [31]
- Веб-сервер LiteSpeed включил метод кодирования контента «br» для статических файлов только с версии 5.2 в июле 2017 года.
- Cloudflare CDN предлагает возможность сжатия данных между своим пограничным узлом и пользователем. [32]
- В NaviServer добавлена поддержка в версии 4.99.17b1.
- Caddy обслуживает статически сжатые файлы .br, начиная с версии 0.9.4 от 21 декабря 2016 г.
- Lighttpd mod_deflate поддерживает .br с версии 1.4.56. [33] с ноября 2020 года.
Ссылки [ править ]
- ^ «Выпуск 1.1.0» . 31 августа 2023 г. Проверено 18 сентября 2023 г.
- ^ Шитер, Род (18 февраля 2015 г.), «Меньшие шрифты с WOFF 2.0 и диапазоном Юникода» , Блог Google с открытым исходным кодом , Маунтин-Вью, Калифорния: opensource.googleblog.com .
- ↑ Перейти обратно: Перейти обратно: а б Алакуйала, Юрки; Ключников Евгений; Шабадка, Золтан; Вандевенн, Лоуд (22 сентября 2015 г.), «Сравнение алгоритмов сжатия Brotli, Deflate, Zopfli, LZMA, LZHAM и Bzip2» (PDF) , The Comprehensive R Archive Network , r-project.org .
- ↑ Перейти обратно: Перейти обратно: а б с Сабадка, Золтан (22 сентября 2015 г.), «Представляем Brotli: новый алгоритм сжатия для Интернета» , Блог Google с открытым исходным кодом , Маунтин-Вью, Калифорния: opensource.googleblog.com .
- ↑ Перейти обратно: Перейти обратно: а б с Алакуйала, Юрки; Сабадка, Золтан (2016), RFC 7932: Формат сжатых данных Brotli , Запрос рабочей группы по проектированию Интернета на комментарии, Фремонт, Калифорния: IETF Trust .
- ^ «W3C получает премию «Эмми» за стандартизацию технологии шрифтов» . 01.06.2022.
- ^ «Изменение облика Интернета: рабочая группа W3C по веб-шрифтам и MPEG отмечены премией Эмми в области технологий и инженерии» . 01.06.2022.
- ^ «Могу ли я использовать... - Бротли» . 28 июня 2022 г.
- ↑ Сжатие без потерь с помощью Brotli в Rust для небольшого количества Pied Piper на бэкэнде , Дэниел Рейтер Хорн и Механт Бэйд, 29 июня 2016 г.
- ^ [1] , Ришаб Джайн и Дэниел Рейтер Хорн, 4 августа 2020 г.
- ^ добавить в сжатый файл Brotli , билет GitHub в Google Brotli, список идей реализации, 6 декабря 2017 г.
- ^ Чиргвин, Ричард (23 сентября 2015 г.), «Новое достижение Google: сжатие Brotli с открытым исходным кодом» , The Register , theregister.co.uk .
- ^ Ларкин, Генри (2007). «Индексирование слов для представлений данных мобильных устройств». 7-я Международная конференция IEEE по компьютерным и информационным технологиям (CIT 2007) . стр. 399–404. дои : 10.1109/CIT.2007.22 . ISBN 978-0-7695-2983-7 . S2CID 8707991 . .
- ^ Алакуйала, Юрки (15 мая 2021 г.). «Статический словарь не является причиной того, что Бротли достигает превосходной плотности сжатия. Многое…» Hacker News .
- ^ Ключников, Евгений. «Как использовать большие размеры окон? · Проблема №639 · google/brotli» . Гитхаб .
В настоящее время мы тестируем расширение «Large Window Brotli», которое позволит использовать окно размером до 1 ГиБ. [...] «Большое окно Бротли» приземлилось.
- ^ Адлер, Марк (26 января 2015 г.), «Обзор и проверка спецификации Brotli» , Адлер Brotli , Сан-Франциско: GitHub .
- ^ Кальвано, Пол (25 июля 2018 г.). «Сжатие Brotli: насколько оно уменьшит ваш контент?» . Проверено 7 марта 2021 г.
- ^ Панджаров, Христо (13 января 2021 г.). «Больше прироста скорости сайта с помощью алгоритма сжатия Бротли» . СайтGround . Проверено 7 марта 2021 г.
- ^ "страница руководства brotli(1)" . Manned.org .
- ^ «Поддержка Brotli · Проблема № 1238 · libarchive/libarchive» . Гитхаб .
Без магической подписи libarchive не может автоматически распознавать тип файла, поэтому он не может автоматически распаковывать его. (Libarchive не учитывает имя файла, а только его содержимое.)
- ^ Гуджер, Бен; и др. (26 января 2016 г.), «Примечания к выпуску Firefox 44» , Mozilla Firefox , Mozilla Foundation .
- ↑ Перейти обратно: Перейти обратно: а б Бахё, Кенджи (15 января 2016 г.), «Принятие кодировки: br при подключении HTTPS» , Статус платформы Chrome , chromestatus.com .
- ^ Трейс, Роб (20 декабря 2016 г.), «Представляем сжатие Brotli в Microsoft Edge» , Microft Edge Developer , blogs.windows.com
- ^ Стенберг, Дэниел; и др. «завиток — Изменения» . Curl.haxx.se. Проверено 14 января 2018 г.
- ^ «ЧИТАЙТЕ» . Гитхаб . 15 октября 2021 г.
- ^ «Google Brotli: Как сжимать, открывать и извлекать файлы BR» .
- ^ «Изменения в Apache 2.4.26» , репозиторий Apache HTTPD , svn.apache.org .
- ^ «Более высокая степень сжатия с помощью сжатия Бротли» . 6 октября 2023 г.
- ^ «Кэширование с помощью Azure Front Door» . docs.microsoft.com . 15 июня 2023 г.
- ^ «Служба Azure Front Door теперь доступна» . azure.microsoft.com .
- ^ «Amazon CloudFront объявляет о поддержке сжатия Brotli» . aws.amazon.com .
- ^ «Что будет сжимать Cloudflare?» . support.cloudflare.com .
- ^ «Информация о выпуске Lighttpd 1.4.56» . redmine.lighttpd.net .
- Примечания
- - Финли, Клинт (22 сентября 2015 г.), «Hooli, я имею в виду Google, бесплатно раздает код сжатия» , Wired Online , Wired.com .
Внешние ссылки [ править ]
- Эталонная реализация Brotli на сайте brotli на GitHub.