LINUX.ORG.RU

Brotli 1.2.0

 , , , ,


1

3

27 октября, после более двух лет разработки, состоялся выпуск стабильной версии 1.2.0 проекта Brotli (официальный сайт и документация API), распространяемого по лицензии MIT.

Brotli – это универсальный алгоритм сжатия без потерь, который сжимает данные с помощью комбинации современного варианта алгоритма LZ77, кодирования Хаффмана и моделирования контекста второго порядка, с коэффициентом сжатия, сопоставимым с лучшими из доступных в настоящее время универсальных методов сжатия. По скорости он схож с deflate, но обеспечивает более плотное сжатие.

Спецификация формата Brotli определена в RFC 7932.

Основная часть проекта написана на языке C. Также предоставляются биндинги для C#, Go, Java, JavaScript и Python.

Список изменений:

  • В кодер и декодер добавлена статическая инициализация для уменьшения размера двоичного файла.
  • Увеличена скорость кодирования.
  • В кодере и декодере статические таблицы используют «малую» модель, что позволяет использовать двоичные файлы размером более 2 ГБ.
  • В консольном псевдониме brcat разрешено декодирование сцепленных потоков brotli.
  • cgo: поддержка «сырых» словарей.
  • cgo: линковка через pkg-config.
  • Java: декодер на Kotlin.
  • Java: удалена finalize() для нативных сущностей.
  • Java: исправлена передача неправильной длины в нативный кодер при сжатии.
  • Python: добавлен метод Decompressor::can_accept_more_data и опциональный аргумент output_buffer_limit Decompressor::process, что позволяет смягчить последствия неожиданно большого вывода.
  • Python: разрешено ограничение вывода декодера.
  • Python: разрешена многоэтапная инициализация модулей.
  • Улучшена инсталляция страниц man.
  • Различные улучшения для системы сборки Bazel.

>>> Исходный код на GitHub

>>> Подробности на GitHub

★★★★★

Проверено: cetjs2 ()
Последнее исправление: dataman (всего исправлений: 3)

Основная часть проекта написана на языке C. Также предоставляются биндинги для C#, Go, Java, JavaScript и Python.

Где ржавый? За такое и партбилет на стол положить можно

PedroGomes
()

Больше алгоритмов сжатия, хороших и разных. Но по моим тестам zstd лучше себя проявляет. так например zstd --ultra -21 --long --zstd=ldmHashLog=25,hlog=25 даёт меньше размер итогового файла и при этом жмёт почти вдвое быстрее, чем brotli -q 9. А на 10-м и 11-м уровне brotli становится ну прям очень уж медленным на сжатие, в 10+ раз медленнее, чем zstd, при этом файл действительно получается меньше, но разница ничтожна. Если нужно такое сжатие, получается выгоднее использовать xz. Может для каких-то сценариев использования brotli и подходит лучше, но ни для каких из моих, явно нет — zstd на порядок и более быстрее, при этом даёт сравнимый результат по степени сжатия.

CrX ★★★★★
()
Ответ на: комментарий от CrX

Может для каких-то сценариев использования brotli и подходит лучше

Вроде им трафик сжимается на многих сайтах.

dataman ★★★★★
() автор топика
Ответ на: комментарий от dataman

Вроде им трафик сжимается на многих сайтах.

Да. Но не факт, что так делают потому что он действительно справляется с этим лучше, чем zstd, а не просто потому что «гугл фигни не сделает».

CrX ★★★★★
()
Ответ на: комментарий от dataman

Ну кто на два года раньше встал, того и RFC. :)

Справедливо.

Но меня тут скорее интересует, есть ли такие сценарии использования, в которых brotli именно технически выполняет задачу лучше, чем zstd.

CrX ★★★★★
()
Ответ на: комментарий от CrX

Вот что отвечает ИИ

Вот ключевые сценарии, где Brotli показывает себя лучше:

Сжатие статического веб-контента. Brotli был разработан компанией Google с учетом особенностей веб-контента, такого как HTML, CSS и JavaScript. Благодаря этому он может достигать меньших размеров файлов, чем Zstd, особенно при высоких уровнях сжатия

А ты на каких файлах проверял уровень сжатия?

greenman ★★★★★
()
Ответ на: комментарий от greenman

А ты на каких файлах проверял уровень сжатия?

На разных, в основном на бинарниках, а также играх. Немножко на исходниках. На HTML и CSS действительно не проверял, может с ними и правда лучше справляется.

CrX ★★★★★
()

Недавно обнаружил что один сайт злостно отдаёт encoding: br несмотря на то что в accept я ему его не слал. Попытался по-быстрому прикрутить поддержку этого бротли в свою проксю - оказалось что там проблемы с документацией и вообще всё сложно (в сравнении с zlib), забил. Может быть там где-то и есть простой способ его использовать («вот отсюда брать вход, сюда писать результат, начинаем»), но ни в так называемой документации, ни вообще в инете я этого не нашёл.

firkax ★★★★★
()
Ответ на: комментарий от dataman

Хм, да, вроде по твоей ссылке есть, и выглядит не особо сложнее zlib. Вот кто мешал им в документации это показать не пойму, а они туда тупо .h сконвертировали автоматически с прототипами и комментариями к ним.

firkax ★★★★★
()
Ответ на: комментарий от greenman

Сжатие статического веб-контента.

ЕМНИП, то у него то у него какие-то механики специально под Web-контент подкручены. Ещё есть формат шрифтов Woff2, который пожат Brotli.

DarkAmateur ★★★★
()
Ответ на: комментарий от dataman

Мало сделать RFC, надо ещё по браузерам растащить. Can I Use говорит, что поддержка Brotli в FF появилась в 44 версии (в 2016 году), а Zstd --- в 126 (в 2024 году). С Chrome примерно так же.

DarkAmateur ★★★★
()
Последнее исправление: DarkAmateur (всего исправлений: 1)

Собирается исключительно CMake, других вариантов сборки нет.

Имена в стиле camelCase, вместо принятого в Си snake_case.

Используется C99 зависимости.

Код написан очень грязно и просто тонет в #ifdef внутри функций, а не снаружи.

Какая-то сумасшедшая иерархия в библиотечке для сжатия. Зачем?

Вывод: эта библиотека непригодна для использования в нормальных проектах.

Хорошая либа для сжатия должна выглядеть хотя бы вот так: https://github.com/kuba--/zip

zx_gamer ★★★
()
Ответ на: комментарий от DarkAmateur

Brotli includes a built-in, static dictionary of common web terms, which improves compression for standard HTTP content.

Там не механики, там встроенный словарь для сжатия интернетов)

devl547 ★★★★★
()
Ответ на: комментарий от devl547

Ну, да, что-то типа того я и имел в виду. Просто боялся ошибиться и обобщил.

DarkAmateur ★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.