Co je gzip a jak se tento nástroj používá?
Software pro kompresi dat gzip je multiplatformní a široce používaný ve vývoji webových stránek a webových projektech jako standardní řešení pro kompresi. Lze jej snadno aktivovat a ovládat pomocí nástroje příkazového řádku, což vám pomůže ušetřit úložný prostor a zlepšit výkon systému.
Jak funguje gzip?
Gzip — zkratka pro „GNU zip“ — je založen na volně dostupném algoritmu Deflate, který kombinuje kompresní metodu LZ77 (Lempel-Ziv 77) s Huffmanovým kódováním. Pomocí těchto technik soubory gzip vyhledávají duplicitní datové řetězce. Pokud program narazí na tyto opakující se sekvence, nahradí je odkazem na řetězec, který se objeví jako první. Délka těchto sekvencí je obvykle omezena na 32 000 bajtů. Pokud se řetězec znaků neobjeví v předchozích 32 000 bajtech, je uložen (bez komprese) do souboru gzip, který dostane příponu .gz.
Postup je omezen na jednotlivé soubory, proto je k vytvoření tzv. tarballových archivů s příponami .tar.gz nebo .tgz potřeba program tar. Ve výchozím nastavení je původní soubor po gzip presi (při přímém použití na soubor) smazán. Toto automatické chování však můžete deaktivovat pomocí volitelného parametru -k. K dekompresi komprimovaných souborů můžete použít buď nástroj gunzip, nebo příslušný příkaz gzip.
Přehled syntaxe a příkazů gzip
I když jsou pro různé platformy k dispozici grafická uživatelská rozhraní, je samozřejmě možné používat gzip prostřednictvím příkazů v terminálu nebo příkazovém řádku. I začátečníci to zvládnou, protože gzip je klasický nástroj příkazového řádku optimalizovaný pro tento druh použití. Obecná syntaxe má následující podobu:
gzip option file(s)bashSpecifikace možností není nutná. Pokud pole zůstane prázdné, gzip použije výchozí nastavení. Například následující jednoduchý příkaz stačí k vytvoření komprimované verze textového souboru example.txt:
gzip example.txtbashChcete-li soubory později dekomprimovat nebo zadat pokyny pro úroveň komprese, umístění úložiště nebo způsob nakládání s původním souborem, budou příkazy vyžadovat příslušné specifikace. Následující tabulka obsahuje přehled gzip nejdůležitějších příkazů:
| Možnost | Popis |
|---|---|
-1 … -9
|
Nastavuje úroveň komprese (1–9), kde 1 poskytuje nejrychlejší a nejméně komprimovaný výsledek a 9 nabízí nejlepší, ale nejpomalejší kompresi; výchozí úroveň je 5
|
-r
|
Rekurzivně prohledá adresář (včetně všech podadresářů) a komprimuje nebo dekomprimuje všechny obsažené soubory |
-f
|
Vynutí kompresi gzip a v případě potřeby přepíše existující soubory se stejným názvem. |
-d
|
Dekomprimuje vybraný soubor do aktuálního adresáře. |
-k
|
Zabraňuje smazání původního souboru. |
-l
|
Zobrazí informace, jako je kompresní poměr komprimovaného souboru. |
-c
|
Vypisuje komprimovaný soubor na standardní výstup (obvykle obrazovku připojenou k příkazovému řádku) |
-q
|
Potlačí všechny zprávy gzip. |
-t
|
Testuje integritu komprimovaného souboru. |
-h
|
Zobrazí seznam všech dostupných možností. |
Případy použití komprese gzip
Dnes je gzip téměř nezávislý na platformě a lze jej podle potřeby rozšiřovat, pokud zvolený projekt splňuje podmínky licence GPL. V systémech Linux je komprimační nástroj obvykle předinstalován nebo snadno dostupný prostřednictvím správce balíčků. Oficiální web gzip nabízí také verze pro macOS a Windows. Tento software můžete na těchto systémech kdykoli použít k úspoře úložného prostoru.
Další klíčovou oblastí použití je web. Webové servery jako Apache podporují kompresi gzip již řadu let a moderní prohlížeče jsou schopny interpretovat komprimované soubory a dekomprimovat je během vykreslování webových stránek. Právě zde může gzip plně vyniknout, protože po jeho aktivaci webový server automaticky komprimuje jak nahraný obsah, tak dynamicky generované prvky webových stránek na serveru. To může výrazně zkrátit dobu načítání webových stránek v rámci základní optimalizace webových stránek. Prohlížeč mezitím zpracovává dekompresi na pozadí, aniž by spotřebovával další šířku pásma. Toto zvýšení výkonu je výhodné zejména pro mobilní uživatele a může nepřímo zlepšit hodnocení vašich webových stránek ve vyhledávačích.
Jak používat kompresi gzip pro váš webový projekt Apache
Webové servery obvykle nabízejí kompresi gzip jako modul, který stačí pouze aktivovat. V současné době mnoho poskytovatelů webhostingu tuto funkci aktivuje automaticky, zatímco v minulosti tomu tak vždy nebylo. Pokud si nejste jisti, zda váš poskytovatel hostingu kompresi gzip podporuje, můžete se na něj obrátit přímo nebo provést ruční kontrolu sami.
Na webovém serveru Apache můžete nastavení modulu zkontrolovat pomocí jednoduchého výstupu phpinfo(). Položka HTTP_ACCEPT_ENCODING vám ukáže, která metoda komprese je vybrána – nebo zda je komprese vůbec povolena. Pokud je k dispozici gzip, máte tři různé možnosti, jak tento kompresní nástroj použít podle svých potřeb.
Možnost 1: Povolte kompresi gzip v souboru .htaccess
Pomocí souboru .htaccess můžete definovat nastavení specifická pro jednotlivé adresáře a konfigurovat webový server v reálném čase. To funguje proto, že konfigurační soubor – obvykle umístěný v kořenovém adresáři– je automaticky načítán při každém požadavku, který dorazí na server. U některých poskytovatelů webhostingu však může být .htaccess umístěn v jiné složce, skrytý nebo dokonce omezený v přístupu. V takovém případě je jedinou možností kontaktovat poskytovatele hostingu a požádat o přístup. Pokud můžete provádět změny, můžete povolit kompresi gzip pomocí modulu pro algoritmus Deflate (mod_deflate) přidáním následujícího kódu do souboru .htaccess:
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
</IfModule>txtK použití modulů mod_gzip a mod_deflate budete také potřebovat svolení svého webhostingu.
Možnost 2: Povolení komprese gzip prostřednictvím PHP
Kompresi gzip lze aktivovat pomocí jednoduchého příkazu PHP. Nevýhodou je, že kód musí být přidán individuálně do každého souboru PHP. Tuto možnost byste proto měli použít pouze v případě, že nemáte potřebná oprávnění k úpravám souboru .htaccess. Řádek kódu, který je třeba umístit na začátek každého souboru, je následující:
<?php
ob_start("ob_gzhandler");
?>phpMožnost 3: Implementace gzipu pomocí pluginu
Kromě těchto dvou manuálních řešení existuje také varianta, která vyžaduje pouze minimální úsilí při nastavení: aktivace komprese gzip pomocí pluginu pro systém správy obsahu, který používáte. Taková užitečná rozšíření, která můžete vložit během několika minut a přizpůsobit svým potřebám, jsou určena především pro CMS jako WordPress, které jsou založeny na PHP. Následující seznam obsahuje tři nejpopulárnější pluginy pro software weblogů:
- W3 Total Cache: Plugin W3 Total Cache pro WordPress slibuje znatelně lepší výkon webových stránek. Kromě různých mechanismů ukládání do mezipaměti a specializované podpory pro mobilní zařízení obsahuje tato sada nástrojů pro SEO a použitelnost také možnosti pro aktivaci komprese gzip.
- WP Rocket: WP Rocket je další klasický plugin pro ukládání do mezipaměti pro WordPress. Je snadno použitelný a od samého začátku aktivuje všechny klíčové funkce pro optimalizaci výkonu, včetně komprese gzip.
- WP Performance Score Booster: Plugin WP Performance Score Booster již překročil 10 000 aktivních instalací. S tímto pluginem můžete snadno povolit gzip a efektivně komprimovat obsah vašeho webového projektu, včetně textu, HTML, JavaScriptu, CSS, XML a dalších.
Jak krok za krokem nakonfigurovat gzip na webovém serveru NGINX
Pokud dodáváte obsah svého webu pomocí webového serveru NGINX, můžete také využít kompresi gzip ke zkrácení doby načítání vašeho projektu. K tomu stačí nakonfigurovat ngx_http_gzip_module. Ve výchozím nastavení je direktiva gzip, která povoluje nebo zakazuje službu komprese, vypnutá.
Chcete-li změnit toto nastavení, otevřete hlavní konfigurační soubor nginx.conf a vyhledejte direktivu gzip. Nahraďte gzip off hodnotou gzip on. Následující tabulka vysvětluje účel a možnosti některých dalších direktiv používaných ke konfiguraci komprese gzip v NGINX:
| Směrnice | Syntaxe | Výchozí nastavení | Popis | |
|---|---|---|---|---|
gzip_buffers
|
gzip_buffers number size;
|
gzip_buffers 32 4k \
|
16 8k;
|
Definuje počet a velikost vyrovnávacích pamětí používaných během procesu komprese. |
gzip_comp_level
|
gzip_comp_level level;
|
gzip_comp_level 1;
|
Nastavuje úroveň komprese; platné hodnoty: 1–9. | |
gzip_min_length
|
gzip_min_length length;
|
gzip_min_length 20;
|
Určuje minimální délku (v bajtech) souboru, který má být komprimován. | |
gzip_http_version
|
gzip_http_version version;
|
gzip_http_version 1.1;
|
Určuje minimální verzi HTTP požadovanou pro komprimované odpovědi. | |
gzip_types
|
gzip_types content-type;
|
gzip_types text/html;
|
Určuje, které typy obsahu by měly být komprimovány (např. CSS, JSON, XML). |
Jak otestovat kompresi gzip
Jakmile nakonfigurujete kompresi gzip pro svůj web, můžete pomocí různých nástrojů ověřit, zda funguje správně a zda váš webový server doručuje komprimovaný obsah v reakci na požadavky klientů. Jedním z nejvíce doporučovaných nástrojů pro tento účel je Google PageSpeed Insights. Stačí zadat libovolnou stránku z vašeho webu a nástroj automaticky analyzuje její obsah a poskytne zprávu o silných a slabých stránkách výkonu stránky. Mezi výsledky najdete informace o tom, zda je komprese gzip povolena.
Alternativně můžete provést rychlý test gzip pomocí HTTP Compression Test na WhatsMyIP.org.