Zarówno Brotli, GZIP jak i Deflate są modułami do Apache, które są w stanie kompresować transmitowane przez Internet dane.

Mamy do czynienia z danymi dlatego kompresja jest oczywiście bezstratna i w ramach ciekawostki wspomnę, że oba bazują na algorytmie Deflate, który służy też do kompresji grafiki w formacie PNG. Czytaj więcej o optymalizacji grafiki dla potrzeb WWW. Co z tego wynika? A no fakt, że oba moduły kompresują z wręcz identyczną skutecznością. Zakodowane przez mod_deflate i mod_gzip zajmują praktycznie tyle samo miejsca i proces kompresji i dekompresji ma tę samą złożoność.

Brotli kompresuje dane z kilkunastoprocentową większą skutecznością dlatego skupimy się właśnie na nim.

Jak działa kompresja deflate?

Kompresja deflate oparta jest o dwa etapy kompresji. W pierwszym etapie wykorzystuje się metodę LZ77 czyli strumieniową słownikową kompresję danych. Metoda ta wykorzystuje powtarzające się sekwencje w ciągach bajtów. Jeżeli jakieś wyrażenie występuje kilkakrotnie w danym pliku, algorytm tworzy słownik na zasadzie klucz-wartość a potem podmienia wszystkie wystąpienia wartości na o wiele krótszy klucz. Drugi i ostatni etap (jak wiele innych systemów kompresji danych) korzysta z algorytmu Huffmana, który jeszcze kiedyś opiszę a na ten moment załączam link do źródeł.

Serwer kompresuje te dane w niewidoczny sposób podczas transmisji. Przeglądarka odbierająca je – dekompresuje.

Brotli

Brotli to o wiele nowszy algorytm stworzony przez Google. Premiera miała miejsce w październiku 2013. Brotli potrafi kompresować strumienie danych z efektywnością o ok. 17% wyższą od GZIP. Początkowo służył do kompresowania fontów internetowych. Od 2015 roku można go używać do kompresji HTTP.

Instalacja i testowanie Brotli

Brotli powinien być włączony na każdym hostingu. Jeżeli zarządzamy własnym serwerem samodzielne instalacja nie powinna srawdzić nam kłopotu:

  apt install brotli

Następnie aktywujemy moduł:

a2enmod brotli

Musimy teraz poinformować serwer, że chcemy korzystać z tej kompresji. Możemy dodać taki wpis do VierualHost bądź pliku .htaccess:

<IfModule mod_brotli.c>
AddOutputFilterByType BROTLI_COMPRESS text/html text/plain text/xml text/css text/javascript application/x-javascript application/javascript application/json application/x-font-ttf application/vnd.ms-fontobject image/x-icon
</IfModule>

Na koniec – standardowo restartujemy serwer.

Jeżeli chcemy sprawdzić czy kompresja Brotli działa, możemy wejść na narzędzie: https://tools.keycdn.com/brotli-test

Zdany test Brotli

Brotli jest kompatybilny z większością popularnych przeglądarek:

Tabela Caniuse dla Brotli

Włączenie mod_gzip w .htaccess:

<ifModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file \.(html?|txt|css|js|php|pl)$
mod_gzip_item_include handler ^cgi-script$ mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</ifModule>

Włączenie mod_deflate w .htaccess:

<ifModule mod_deflate.c> <filesMatch "\.(js|css)$"> SetOutputFilter DEFLATE </filesMatch> </ifModule>

Instalacja i włączenie modułu GZIP na serwerze

Jeżeli nie posiadamy hostingu wirtualnego, który pozwala skorzystać z GZIP moduł ten należy włączyć samodzielnie (o ile mamy dostęp do systemu operacyjnego w ramach serwera dedykowanego lub VPS).

sudo a2enmod deflate

Zamiast dodawać komendy do .htaccess, można od razu w pliku konfiguracyjnym Apache dodać komendy odpowiedzialne za kompresję np:

AddOutputFilterByType DEFLATE text/html text/plain text/css application/javascript

Instrukcje można dodać też do .htaccess:

<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/vnd.ms-fontobject
AddOutputFilterByType DEFLATE application/x-font
AddOutputFilterByType DEFLATE application/x-font-opentype
AddOutputFilterByType DEFLATE application/x-font-otf
AddOutputFilterByType DEFLATE application/x-font-truetype
AddOutputFilterByType DEFLATE application/x-font-ttf
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE font/opentype
AddOutputFilterByType DEFLATE font/otf
AddOutputFilterByType DEFLATE font/ttf
AddOutputFilterByType DEFLATE image/svg+xml
AddOutputFilterByType DEFLATE image/x-icon
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/xml
</IfModule>

Testowanie kompresji GZIP/deflate

Poprawne działanie modułu GZIP możemy zweryfikować analizując odpowiedzi serwera, ale można też użyć przyjaznych narzędzi testujących dostępnych online, takich jak: varvy.com/tools/gzip/

Jak widać, mimo tego, że moja strona nie jest skomplikowana, kompresja GZIP pozwoliła zaoszczędzić 70% jej rozmiaru. Proszę teraz pomyśleć, jak znaczne przyspieszenie można uzyskać w przypadku bardziej rozbudowanych serwisów.

Zalety stosowania Brotli, mod_gzip/mod_deflate

  • mniejsza objętość transmitowanych danych – może dochodzić do zaoszczędzenia ponad 75% objętości
  • wszelkie pochodne szybszego działania stron, sklepów i aplikacji internetowych
  • lepsze wyniki we wszelkiego automatycznych analizatorach optymalizacji SEO

Co wybrać i czego nie kompresować?

Moduł Brotli jest „nowszy”, częściej zalecany i możliwy do włączenia dla większości popularnych serwerów HTTP. Jeżeli nie mamy możliwości, możemy wykorzystać deflate dystrybuowany w oryginalnym Apache. Warto wyrobić nawyk stosowania najbardziej efektywnych modułów do kompresji. Instrukcje włączające mod_gzip stosujemy wtedy, jeżeli z jakichś powodów instrukcje dla mod_brotli lub mod_deflate nie działają.

Nie należy kompresować już wcześniej skompresowanych danych, czyli np. .rar, .zip, .jpeg, .jpg i .png. Tutaj nie zaobserwujemy żadnego korzystnego wpływu kompresji, ponieważ skompresowanych danych innym algorytmem nie da się efektywnie „dokompresować” innym. Paradoksalnie może dojść do efektu odwrotnego – dane będą zajmować więcej miejsca po dwóch takich operacjach. Drugim minusem jest niepotrzebne obciążenie serwera, który będzie te dane próbował kompresować.

Źródła:

Oceń artykuł na temat: GZIP, Deflate a może Brotli?- jak włączyć i co wybrać?
Średnia : 4.7 , Maksymalnie : 5 , Głosów : 25