Gzip проти Brotli – який метод стиснення вам слід використовувати та чому
Gzip став золотим стандартом для стиснення файлів на початку 1990-х років, але якщо ви все ще використовуєте його в 2018 році, ви можете розглянути можливість переходу на новий метод стиснення.
Хоча Gzip все ще займає своє місце в серцях багатьох, веб-розробники все частіше звертаються до кращих варіантів, таких як алгоритм стиснення Google Brotli.
Коротка історія стиснення файлів
«G» у Gzip — це скорочення від GNU. GNU — це операційна система на базі Unix з відкритим кодом, яка була розроблена в 1980-х роках. На той час Unisys і IBM уже запатентували власні алгоритми для стиснення та розпакування файлів, що дозволило тому програмісти Жан-Лу Ґейлі та Марк Адлер створили Gzip як безкоштовну альтернативу для користувачів GNU.
Новий Gzip був не просто дешевою підробкою; насправді він був швидшим, ніж його захищені авторським правом конкуренти. У результаті люди все ще використовують його для стиснення файлів донині. Хоча легко дотримуватися того, що вам зручно, існують різні алгоритми стиснення, які наразі забезпечують кращі результати стиснення, ніж Gzip. Ось тут і з’являється Бротлі.
Що таке Brotli?
Brotli — це новіша специфікація формату даних, яка використовує переваги кількох алгоритмів для більш ефективного ущільнення даних, ніж Gzip. У 2015 році специфікація Brotli була узагальнена для стиснення потоку HTTP з типом кодування вмісту «br».
Розроблений Jyrki Alakuijala та Zoltan Szabadka, Brotli використовує ті самі алгоритми стиснення, що й Gzip, але він також підтримується словником часто вживаних слів і фраз, щоб забезпечити кращий коефіцієнт стиснення.
Майте на увазі, що Gzip і Brotli слід використовувати лише для стиснення текстових файлів. Бінарні файли, як-от JPEG і MP4, покладаються на власні алгоритми стиснення для певного формату. Якщо ви спробуєте стиснути JPEG за допомогою Brotli, отриманий файл буде більшим за оригінальний.
Хоча так було не завжди, зараз Brotli підтримується всіма основними браузерами.
У випадку, якщо веб-переглядач, який не підтримує Brotli, запитує ресурс із сайту, який доставляє файли, стиснені Brotli, сервер повернеться до Gzip і надасть закодовані ресурси, які підтримує веб-переглядач, якщо сервер налаштовано належним чином.
Що робить Brotli кращим?
Згідно з дослідженням, проведеним CertSimple :
- Пакети JavaScript, стиснуті за допомогою Brotli, на 14 відсотків менші за пакети Javascript, стиснуті за допомогою Gzip.
- HTML-файли, стиснуті Broti, на 21 відсоток менші за їхні еквіваленти Gzip.
- Файли CSS, стиснуті Brotli, на 17 відсотків менші за файли, стиснуті Gzip.
Оскільки більшість веб-сайтів покладаються на всі три типи активів, це значна різниця в розмірах активів у порівнянні з Gzip. Ця економія, у свою чергу, помітно покращить продуктивність вашої програми.
Gzip проти Brotli: як отримати максимум від Brotli
Незважаючи на те, що ви, можливо, чули, стиснення активів за допомогою Brotli не повільніше, ніж Gzip. Тим не менш, Gzip і Brotli пропонують різні рівні стиснення, і налаштування Brotli за замовчуванням можуть призвести до повільнішого стиснення, ніж налаштування за замовчуванням Gzip. Вам доведеться внести деякі зміни в Brotli, щоб знайти прийнятний баланс між розміром файлу та швидкістю стиснення.
Ідеальний параметр стиснення залежить від того, що і коли ви стискаєте. Гарною відправною точкою є Brotli 4 для швидшого стиснення динамічного вмісту. З іншого боку, статичні ресурси можна попередньо стиснути щільніше без шкоди для швидкості, тому для такого вмісту більше підходить значення за замовчуванням «11».
Встановлення Brotli на ваш веб-сервер
Додавання підтримки для Brotli забезпечує значні переваги за мінімальних зусиль. Залежно від програмного забезпечення веб-сервера, яке ви використовуєте, визначатиметься, який метод інтеграції вам знадобиться використовувати для інтеграції Brotli. Нижче описано кілька доступних варіантів:
- Nginx має розширення Brotli, запропоноване Google.
- Apache пропонує спеціальне розширення Brotli.
- Microsoft IIS не пропонує жодної офіційної підтримки Brotli, однак є модуль спільноти, який додає підтримку.
- Node.js схожий на Microsoft тим, що немає офіційної підтримки, однак є модуль спільноти.
Щоб продемонструвати приклад швидкого встановлення, припустімо, що ви використовуєте Nginx. У цьому випадку ви можете встановити модуль ngx_brotli з таким:
cd nginx-1.x.x
$ ./configure --add-module=/path/to/ngx_brotli
$ make && make install
Далі додайте наступне до блоку HTTPS (Brotli працює лише через 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;
Ви можете змінити наведені вище директиви, як вважаєте за потрібне.
Нарешті, введіть наступне, щоб перезапустити NGINX і почати отримувати переваги:
sudo systemctl restart nginx
Використання Brotli з попередньо стиснутими ресурсами
Brotli чудово підходить для доставки попередньо стиснутих ресурсів набагато швидше, ніж Gzip. Це пов’язано з тим, що ви можете стиснути їх на найвищому рівні Brotli (11), а потім мати вихідний сервер, який забере їх щоразу, коли буде потрібно.
Цей тип налаштувань чудово працює з Webpack, оскільки плагін Webpack доступний для автоматичного стиснення ваших статичних ресурсів як Gzip, так і Brotli. Тому стиснення на льоту не потрібне, що означає економію часу, витраченого на стиснення файлів.
Дізнайтеся більше про те, як використовувати Webpack для створення ресурсів, стиснених Brotli.
Чи підтримує ваш CDN Brotli?
Щоб повністю скористатися перевагами Brotli, вам потрібна мережа доставки контенту, яка його підтримує. KeyCDN, наприклад, представив підтримку Brotli минулого року для всіх клієнтів без додаткових витрат. Таким чином, ваш сайт не тільки виграє від зменшення розмірів файлів завдяки кращому стисненню Brotli, але вони також виграють від зменшення затримки завдяки кеш-пам’яті активів на периферійних серверах ближче до ваших відвідувачів.
Цей метод вимагає, щоб ваш вихідний сервер підтримував Brotli і щоб фактичне стиснення відбувалося на стороні вихідного сервера. Знову ж таки, це допомагає заощадити час і уникнути необхідності стиснення на льоту, яке може погіршити продуктивність.
Gzip проти Brotli: Підсумок
Незначна кількість зусиль, необхідних для додавання Brotli до вашого веб-сервера, вартує значної економії розміру файлу. Хоча Brotli іноді може працювати повільніше на найвищих параметрах стиснення, ви можете легко досягти ідеального балансу між швидкістю стиснення та розміром файлу, налаштувавши параметри.
Хоча використання Brotli може перетворити швидкі веб-програми на швидші, це не обов’язково зробить повільні програми швидкими. Оскільки Brotli стискає лише текстові ресурси, вам потрібно буде оптимізувати зображення іншими засобами. Якщо ви ще не перейшли на HTTP/2, це може значно змінити продуктивність вашої програми. Кожна мілісекунда має значення, тому будь-які дії, які ви вживаєте для прискорення роботи програми, покращують ваші шанси на збереження користувачів.