Gzip vs Brotli – jakiej metody kompresji należy używać i dlaczego
Opublikowany: 2018-03-02Gzip stał się złotym standardem kompresji plików na początku lat 90., ale jeśli nadal używasz go w 2018 roku, możesz rozważyć przejście na nowszą metodę kompresji.
Chociaż Gzip nadal ma swoje miejsce w sercach wielu, twórcy stron internetowych coraz częściej sięgają po lepsze opcje, takie jak algorytm kompresji Google Brotli.
Krótka historia kompresji plików
„G” w Gzip to skrót od GNU. GNU to open source'owy system operacyjny oparty na Uniksie, który został opracowany w latach 80-tych. Do tego czasu Unisys i IBM opatentowały już własne algorytmy kompresji i dekompresji plików, które pozwoliły ich maszynom na przechowywanie większej ilości danych. Dlatego programiści Jean-loup Gailly i Mark Adler stworzyli Gzip jako darmową alternatywę dla użytkowników GNU.
Nowy Gzip nie był tylko tanim podróbką; w rzeczywistości był szybszy niż jego konkurenci objęci prawami autorskimi. W rezultacie do dziś ludzie używają go do kompresji plików. Chociaż łatwo jest trzymać się tego, z czym czujesz się komfortowo, istnieją różne algorytmy kompresji, które obecnie zapewniają lepsze wyniki kompresji niż Gzip. Tu właśnie pojawia się Brotli.
Co to jest Brotli?
Brotli to nowsza specyfikacja formatu danych, która wykorzystuje wiele algorytmów do kondensacji danych wydajniej niż Gzip. W 2015 roku specyfikacja Brotli została uogólniona na kompresję strumienia HTTP z typem kodowania treści „br”.
Opracowany przez Jyrki Alakuijala i Zoltana Szabadkę, Brotli używa tych samych algorytmów kompresji co Gzip, ale jest również obsługiwany przez słownik często używanych słów i fraz, aby zapewnić lepszy współczynnik kompresji.
Pamiętaj, że Gzip i Brotli powinny być używane tylko do kompresji plików tekstowych. Pliki binarne, takie jak JPEG i MP4, opierają się na własnych algorytmach kompresji specyficznych dla formatu. Jeśli spróbujesz skompresować JPEG za pomocą Brotli, wynikowy plik będzie w rzeczywistości większy niż oryginał.
Chociaż nie zawsze tak było, Brotli jest teraz obsługiwany przez wszystkie główne przeglądarki.
W przypadku, gdy przeglądarka, która nie obsługuje Brotli zażąda zasobu ze strony dostarczającej skompresowane pliki Brotli, serwer przełączy się na Gzip i dostarczy zakodowane zasoby obsługiwane przez przeglądarkę – zakładając, że serwer jest poprawnie skonfigurowany.
Co sprawia, że Brotli jest lepszy?
Według badań przeprowadzonych przez CertSimple:
- Pakiety JavaScript skompresowane za pomocą Brotli są o 14 procent mniejsze niż pakiety JavaScript skompresowane za pomocą Gzip.
- Pliki HTML skompresowane przez Broti są o 21% mniejsze niż ich odpowiedniki w formacie Gzip.
- Pliki CSS skompresowane przez Brotli są o 17 procent mniejsze niż te skompresowane przez Gzip.
Ponieważ większość stron internetowych opiera się na wszystkich tych trzech typach zasobów, jest to znaczna różnica w rozmiarach zasobów w porównaniu z Gzip. Te oszczędności z kolei spowodują zauważalną poprawę wydajności Twojej aplikacji.
Gzip vs Brotli: jak najlepiej wykorzystać Brotli
Pomimo tego, co mogłeś słyszeć, kompresja zasobów za pomocą Brotli nie jest wolniejsza niż Gzip. To powiedziawszy, Gzip i Brotli oferują różne poziomy kompresji, a domyślne ustawienia Brotli mogą skutkować wolniejszą kompresją niż domyślne ustawienia Gzip. Będziesz musiał wprowadzić pewne poprawki do Brotli, aby uzyskać akceptowalną równowagę między rozmiarem pliku a szybkością kompresji.
Idealne ustawienie kompresji zależy od tego, co i kiedy kompresujesz. Dobrym punktem wyjścia jest Brotli 4 do szybszej kompresji zawartości dynamicznej. Z drugiej strony, statyczne zasoby można wcześniej skompresować gęściej bez poświęcania szybkości, więc domyślne ustawienie „11” jest bardziej odpowiednie dla takich treści.
Instalowanie Brotli na serwerze WWW
Dodanie wsparcia dla Brotli zapewnia znaczne korzyści przy minimalnym wysiłku. W zależności od używanego oprogramowania serwera WWW określi, której metody integracji należy użyć do integracji Brotli. Poniżej przedstawiono kilka dostępnych opcji:
- Nginx ma rozszerzenie Brotli oferowane przez Google.
- Apache oferuje dedykowane rozszerzenie Brotli.
- Microsoft IIS nie oferuje żadnego oficjalnego wsparcia Brotli, jednak istnieje moduł społeczności, który dodaje wsparcie.
- Node.js jest podobny do Microsoft pod tym względem, że nie ma oficjalnego wsparcia, ale istnieje moduł społecznościowy.
Aby zademonstrować przykład szybkiej instalacji, załóżmy, że używasz Nginx. W takim przypadku możesz zainstalować moduł ngx_brotli w następujący sposób:
cd nginx-1.x.x $ ./configure --add-module=/path/to/ngx_brotli $ make && make install
Następnie dodaj następujące elementy do bloku HTTPS (Brotli działa tylko przez 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;
Możesz modyfikować powyższe dyrektywy według własnego uznania.
Na koniec wprowadź następujące polecenie, aby ponownie uruchomić NGINX i zacząć czerpać korzyści:
sudo systemctl restart nginx
Korzystanie z Brotli ze wstępnie skompresowanymi zasobami
Brotli doskonale nadaje się do dostarczania wstępnie skompresowanych zasobów znacznie szybciej niż Gzip. Wynika to z faktu, że możesz je skompresować na najwyższym poziomie Brotli (11), a następnie serwer pochodzenia odbierze je na żądanie.
Ten rodzaj konfiguracji działa świetnie z Webpack, ponieważ dostępna jest wtyczka Webpack do automatycznej kompresji zasobów statycznych zarówno jako Gzip, jak i Brotli. Dlatego nie jest wymagana kompresja w locie, co oznacza oszczędność czasu spędzonego na kompresowaniu plików.
Dowiedz się więcej o tym, jak używać Webpack do generowania skompresowanych zasobów Brotli.
Czy Twój CDN obsługuje Brotli?
Aby w pełni czerpać korzyści z Brotli, potrzebujesz sieci dostarczania treści, która ją obsługuje. Na przykład KeyCDN wprowadził wsparcie Brotli w zeszłym roku dla wszystkich klientów bez dodatkowych kosztów. Dlatego Twoja witryna nie tylko skorzysta na zmniejszonych rozmiarach plików dzięki lepszej kompresji Brotli, ale także zyska na zmniejszonych opóźnieniach dzięki zasobom buforowanym na serwerach brzegowych bliżej odwiedzających.
Ta metoda wymaga, aby serwer pochodzenia obsługiwał Brotli i że rzeczywista kompresja odbywa się po stronie serwera pochodzenia. Ponownie, pomaga to zaoszczędzić czas i uniknąć konieczności kompresji w locie, która może negatywnie wpłynąć na wydajność.
Gzip vs Brotli: Podsumowanie
Niewielki wysiłek wymagany do dodania Brotli do serwera internetowego jest warty znacznych oszczędności rozmiaru pliku. Chociaż Brotli może czasami działać wolniej przy najwyższych ustawieniach kompresji, możesz łatwo osiągnąć idealną równowagę między szybkością kompresji a rozmiarem pliku, dostosowując ustawienia.
Chociaż korzystanie z Brotli może zmienić szybkie aplikacje internetowe w szybsze, niekoniecznie sprawi, że wolne aplikacje będą szybkie. Ponieważ Brotli kompresuje tylko zasoby tekstowe, musisz zoptymalizować obrazy w inny sposób. Jeśli musisz jeszcze przejść do HTTP/2, może to znacznie wpłynąć na wydajność Twojej aplikacji. Liczy się każda milisekunda, więc każda czynność, którą podejmiesz, aby przyspieszyć działanie aplikacji, zwiększa Twoje szanse na zatrzymanie użytkowników.