Kompresja GZIP stron WWW

Czym jest kompresja GZIP? Jakie ma zalety i wady? Jak sprawdzić, czy jest włączona? Jak uruchomić GZIP na stronie WWW (3 metody)?

Dla właścicieli stron internetowych, priorytetem powinno być jak najszybsze dostarczenie treści do odbiorców, którzy odwiedzają witrynę. Przepustowość i szybkość łączy internetowych zwiększają się, jednak dane na stronach internetowych również powiększają swoje rozmiary. Trzeba zatem znaleźć rozwiązanie, które pozwoli szybciej przesyłać dane podczas przeglądania stron www – pomóc w tym może kompresja Gzip.

🏆️ Zobacz ranking hostingów (Październik 2021)

Najpierw zacznijmy od ogólnego wyjaśnienia pojęcia kompresja w odniesieniu do danych. Słownik języka polskiego tłumaczy to jako “zmniejszanie pliku lub folderu, by zaoszczędzić wolne miejsce na dysku lub wysłać dane przez internet”. Ta bardzo krótka i prosta definicja, ale w 100% oddaje ideę tego terminu.

Wysyłanie danych przez internet, to także przeglądanie stron www – dane (zdjęcia, tekst, video) pobierane są z serwera i trafiają do przeglądarki internetowej, zainstalowanej na urządzeniu odbiorcy. Chodzi o to, aby podczas przesyłania dane te zajmowały jak najmniej miejsca, a więc były skompresowane. W ten sposób da się je przesłać szybciej.

Wyobraźmy sobie, że prowadzimy sklep internetowy z piłkami plażowymi. Do klientów wysyłamy piłki, które są oczywiście nienadmuchane. Przesyłanie piłek już nadmuchanych nie miałoby sensu – wysyłka wielkich kartonów jest bardzo droga. Piłkę, która po nadmuchaniu będzie miała 50 cm, da się spakować do przesyłki w formacie listu. Nadmucha ją dopiero kupujący, i to z pewnością, gdy będzie już na plaży – nie zabierze przecież napompowanej piłki do samochodu, by wypełniła większość bagażnika.

Kompresja jest używana na ponad 86% wszystkich stron internetowych, a zdecydowanie najpopularniejszym rozwiązaniem jest właśnie Gzip.

Aby zrozumieć kompresję na potrzeby www, spójrz na poniższy kod prosty kod HTML:

Przykładowy prosty kod HTML strony
Przykładowy prosty kod HTML strony

Tak wygląda podstawowa struktura dokumentu HTML – strony internetowej. Plik zajmuje 2271 bajtów. Jest to oczywiście forma bez kompresji. A kompresja w takich przypadkach polega np. na usunięciu komentarzy czy spacji. Gdybyśmy ten sam kod zapisali w edytorze tekstowym w jednej linii zająłby on 1529 bajtów – 30% mniej usuwając tylko spacje i „entery”.

Przykładowy prosty kod HTML po usunięciu spacji w jednej linii
Przykładowy prosty kod HTML po usunięciu spacji w jednej linii

Dla użytkownika czytelniejszy jest oczywiście ten pierwszy kod, natomiast dla przeglądarki nie ma to żadnego znaczenia – strona wyświetla się dokładnie tak samo.

Jak działa kompresja GZIP?

Prezentowany powyżej przykład, to oczywiście bardzo uproszczona forma kompresji. W przypadku Gzip mamy do czynienia z bardziej zaawansowanymi algorytmami, ale na podstawie tego kodu możemy wyobrazić sobie ogólne założenia kompresji. Gzip bazuje na algorytmie Deflate.

Aby technologia Gzip funkcjonowała, musi być wspierana zarówno przez serwer, na którym umieszczona jest strona www, jak i przeglądarkę internetową odbiorcy. W związku z tym, pierwszy krok wykonuje serwer – sprawdza czy przeglądarka użytkownika obsługuje Gzip. 

Jest to w zasadzie formalność, ponieważ praktycznie każda najnowsza wersja przeglądarki www obsługuje Gzip, a w zasadzie najpopularniejsze przeglądarki obsługują tą technologią już od kilkunastu lat.

Nie ma również problemów ze wspierającymi rozwiązanie Gzip serwerami HTTP. Wybierając popularne serwery, np. Apache, Nginx czy LiteSpeed nie musimy się martwić o wsparcie Gzip.

Jeśli przeglądarka obsługuje Gzip, serwer generuje znaczniki dla strony, które są przekształcane w skompresowany strumień danych. Następnie strumień ten wysyłany jest do przeglądarki użytkownika, a tam dekompresowany.

Warto wspomnieć, że Gzip jest kompresją bezstratną, co oznacza, że po dekompresji mają taką samą postać, jak te sprzed kompresji.

Istnieją dwa sposoby kompresji plików stron internetowych:

  • statyczny – dotyczy to plików, które nie zmieniają często swojej zawartości, np. skrypty JavaScript, style CSS czy zdjęcia, 
  • dynamiczny – dotyczy plików, które często są aktualizowane, w związku z czym zmienia się ich zawartość. 

Zalety kompresji Gzip

  • Bardzo szybka, a to oznacza, że idealnie nadaje się do kompresji danych w czasie rzeczywistym, np. przy przesyłaniu danych z serwera www do przeglądarki internauty. Szybkość ta dotyczy zarówno kompresji jak i dekompresji.
  • Darmowa (oparty na licencji GNU), nie musisz przejmować się opłacaniem abonamentu czy skomplikowanymi licencjami.
  • Nie obciąża zbytnio zasobów sprzętowych serwera (procesor, pamięć). Dlatego też znalazła powszechne zastosowanie i jest używana nawet na tych tańszych hostingach.

Kompresja Gzip pozwala na zredukowanie rozmiarów plików nawet o 90% wg. badań Kinsta:

Wyniki kompresji GZIP popularnych bibliotek JS i CSS
Wyniki kompresji GZIP popularnych bibliotek JS i CSS – kinsta.com

Gzip nie ma najlepszego współczynnika kompresji – znajdziemy algorytmy, które radzą sobie lepiej pod tym względem, ale mimo wszystko jest wystarczająco dobry.

Jak włączyć GZIP?

Opisuję to zagadnienie z punktu widzenia właściciela strony internetowej, który umieścił ją na jakimś hostingu współdzielonym. Oczywiście jeśli miałbyś swój własny serwer lub uprawnienia i wiedzę dotyczącą administracji serwerami, wskazówki te mogłyby wyglądać inaczej. Większość osób korzysta jednak z hostingów współdzielonych.

Proces uruchamiania kompresji Gzip, powinieneś zacząć od sprawdzenia, czy jest ona już włączona – warto to zrobić, ponieważ większość popularnych serwerów internetowych (np. Apache, LiteSpeed, NGINX) posiada już domyślnie włączoną kompresję.

Najlepiej sprawdzić to następującym narzędziem online: https://base64.guru/tools/gzip-test – wpisz adres URL i otrzymasz komunikat, czy kompresja Gzip jest włączona (enabled) czy wyłączona (disabled). Przy okazji zobaczysz także, na jakim serwerze pracuje Twoja strona:

GZIP wyłączony
GZIP wyłączony

Powyższy przykład pokazuje, że kompresja Gzip jest wyłączona, a strona działa na serwerze LiteSpeed

Jeśli kompresja jest wyłączona (disabled), przedstawiam poniżej kilka możliwych opcji na włączenie Gzip.

Metoda 1: Plik .htaccess

Włączenie kompresji Gzip możliwe jest za pomocą pliku .htaccess. Znajduje się on w głównym folderze domeny (najczęściej w katalogu public_html). To plik, w którym przechowywane są różne ustawienia konfiguracyjne. Jego zaletą jest bardzo łatwa edycja.

Możesz go edytować, np. z poziomu panelu administracyjnego hostingu lub pobrać za pomocą programu (klienta FTP lub SFTP) i otworzyć w dowolnym edytorze tekstu (nawet windowsowym notatniku). Do pliku .htaccess należy dodać następujący kod:

<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>

Następnie plik należy zapisać i wrzucić na serwer, nadpisując starszą wersję pliku. Przed edytowaniem czegokolwiek, zrób sobie kopię oryginalnego pliku .htaccess, tak aby w razie jakichś kłopotów móc przywrócić starą wersję.

Powyższe postępowanie dotyczy serwerów, które obsługują pliki .htaccess, np. Apache, LiteSpeed. Procedura będzie wyglądać nieco inaczej na serwerach NGINX. Musisz wówczas odnaleźć plik nginx.conf i dodać do niego następujący kod:

gzip on;
gzip_disable "MSIE [1-6].(?!.*SV1)";
gzip_vary on;
gzip_types text/plain text/css text/javascript image/svg+xml image/x-icon application/javascript application/x-javascript;

Metoda 2: Kontakt z dostawcą hostingowym

Jeżeli z jakichś powodów powyższe wskazówki nie zadziałają lub nie potrafisz ich wykonać, spróbuj skontaktować się z Twoim dostawcą hostingu i poprosić o włączenie kompresji Gzip. Zajmie to niewiele czasu, a firma hostingowa nie powinna stwarzać problemów z włączeniem Gzip.

Metoda 3: Wtyczka WordPress

Wskazówka ta dotyczy tylko stron, które oparte są na popularnym systemie zarządzania treścią WordPress. Istnieje możliwość włączenia kompresji Gzip za pomocą wtyczek. Najpopularniejsza z nich to: Enable Gzip Compression

Choć poza nią kompresję Gzip włączy też większość popularnych wtyczek do cache i optymalizacji strony (np. LiteSpeed Cache, WP-Rocket, W3 Total Cache, WP Super Cache itd.)

Gzip – kiedy nie warto

Kompresja plików to nic innego jak wykonywanie pewnych algorytmów (w przypadku stron internetowych: na serwerach www), które obciążają procesor. W związku z tym istnieją sytuacje, w których nie warto przeprowadzać kompresji, bo marnowanie zasobów sprzętowych będzie nieopłacalne:

  • zdjęcia: warto zadbać o to, aby były one skompresowane już podczas umieszczania ich na stronie. Nie ma zatem sensu ponowna ich kompresja przez algorytm Gzip, zwłaszcza, że w niektórych przypadkach może doprowadzić nawet do zwiększenia ich rozmiaru.
  • dokumenty PDF: ten sam przypadek, co zdjęcia
  • małe pliki: w dużym uproszczeniu można powiedzieć, że pliki przesyłane są w pakietach (wynika to z protokołu sieciowego TCP/IP) o rozmiarach 1500 bajtów. Nawet jeżeli plik będzie miał 500 bajtów, zostanie przesłany w pakiecie o rozmiarze 1500. W związku z tym nie ma sensu kompresować bardzo małych plików – PageSpeed Insights lub narzędzie Lighthouse w przeglądarce Chrome wyświetli ostrzeżenie, jeśli rozmiar pliku jest większy niż 1,4 kilobajta (dokładnie są to 1434 bajty).

Sprawdź czy kompresja Gzip działa prawidłowo

Jeżeli wdrożyłeś już mechanizm kompresji Gzip, możesz skorzystać z narzędzi, które pozwolą Ci sprawdzić, czy działa ona prawidłowo i jaki jest dokładnie procent kompresji. Możesz oczywiście wykorzystać stronę, którą podałem wyżej w akapicie “Jak włączyć GZIP”, ale poniższe dwa narzędzia wyświetlą Ci dodatkowe dane:

Po wpisaniu adresu strony, otrzymasz wynik:

Strona skompresowana!
Strona skompresowana!

Jak widać, kompresja wyniosła 70,8%, co jest całkiem przyzwoitym wynikiem. Dane przed kompresją zajmowały 50,3 kilobajta, a po kompresji tylko 14,7 KB. 

Alternatywa dla Gzip – Brotli?

Gzip nie jest jedyną technologią kompresji danych na potrzeby stron internetowych. Często podawaną alternatywą jest Brotli. Można powiedzieć, że Brotli charakteryzuje się jeszcze lepszym współczynnikiem kompresji niż Gzip, tzn. mówiąc kolokwialnie potrafi bardziej zmniejszać pliki, przez co z serwera do przeglądarki przesyłana jest mniejsza ilość danych.

Warto wspomnieć o trzech kwestiach. 

  1. Brotli jest używany tylko z protokołem HTTPS. Teoretycznie nie powinno być to dużym problemem, ponieważ jako właściciel strony internetowej, powinieneś już, jak to rekomenduje m.in. Google, zadbać o certyfikat SSL dla swojej strony.
  2. Należy spodziewać się mniejszego wsparcia ze strony przeglądarek niż w przypadku Gzip. Brotli nie jest obsługiwany np. przez Internet Explorer. 
  3. Sugeruje się, że Brotli przeznaczony jest głównie dla treści statycznych. W przypadku, gdy użytkownik żąda zawartości dynamicznej, poleca się używanie Gzip.
  4. Kwestią dyskusyjną jest szybkość. To, że Brotli może zaoferować lepszy współczynnik kompresji, nie oznacza automatycznie, że dane zostaną przesłane szybciej, bo są mniejsze. Trzeba wziąć jeszcze pod uwagę czas, jaki potrzeba na kompresję tych danych. A w tym aspekcie teoretycznie przewagę ma Gzip. Choć dużo zależy od konfiguracji i ustawienia poziomu kompresji.

Jeśli jesteś właścicielem strony www lub osobą odpowiedzialną za jej widoczność w wyszukiwarkach, kompresja danych jest tematem obowiązkowym – niezależnie od tego czy jest to mała wizytówka, czy duży sklep internetowy. Powinieneś zapoznać się z technologią Gzip, dzięki czemu będziesz w stanie zaoferować odwiedzającym szybsze wczytywanie danych.

Szukasz szybkiego, wydajnego i niezawodnego hostingu?
🏆️ Zobacz Ranking Hostingów Październik 2021!

Jest to lista firm hostingowych, których usługi dokładnie przetestowałem m.in. właśnie pod kątem szybkości i wydajności działania. Zapraszam.