Gyorsítsuk fel a lapunkat 2. – A tömörítés

A keresők üzemeltetőinek ajánlásában kiemelt helyen szerepel, hogy a webszerver tömörített formában (is) biztosítsa a letöltendő tartalmat. A dolog vitatható, hiszen a legtöbb webszerveren általános formátum eleve tömörített (pl. JPEG, GIF, PNG képek) , a HTML, Javascript és CSS fájlok méretei pedig nem túl jelentősek. Nyereség tehát kevés, csak a lassabb mobilos kapcsolatok profitálnak belőle egy keveset. Azért írom, hogy keveset, mert a lassabb mobilos és analóg modemes kapcsolatok eleve használnak tömörítést az adatforgalomban.


Gzip tömörítés

Apache webszerver és a tömörítés

Az Apache webszerveren a legtöbb esetben már alapértelmezetten rendelkezésre áll a mod_deflate modul, amely megoldást kínál a webszerverünk kimenetének tömörítésére. Az alábbi megoldás egyaránt alkalmazható statikus és dinamikus lapok esetében.

Apache webszerver esetén az Vhost konfigurációját az alábbiakkal egészítsük ki a GZIP tömörítés engedélyezéséhez.

# tömörítés engedélyzése Apache szerveren
<IfModule deflate_module>
    SetOutputFilter DEFLATE
    SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
    SetEnvIfNoCase Request_URI \.(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
    SetEnvIfNoCase Request_URI \.pdf$ no-gzip dont-vary

    BrowserMatch ^Mozilla/4 gzip-only-text/html
    BrowserMatch ^Mozilla/4\.0[678] no-gzip
    BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

    DeflateBufferSize 8096

    DeflateCompressionLevel 3
</IfModule>

Egy hasznos tipp a nagy méretű, jól tömöríthető fájlokat kiszolgáló webszerverekre

A fenti módszerrel elérhetjük, hogy a webszerver minden – nem eleve tömörített – fájlt tömörítve küldjön a böngészők felé. Van azonban olyan eset, ahol ez a webszerveren már nem elfogadható mértékben növelné a terhelést.  Gondolok itt bármilyen fájlformátumra, amely nem használ tömörítést, pl. nagy méretű, tömörítetlen BMP formátumok. Ezeknél komoly erőforrás-pazarlást okoz, hogy a webszerver minden egyes kliens kiszolgálásakor nekiáll tömöríteni az adott fájlt.

Egyik lehetőség, hogy ezeket eleve egy tömörített archívumban töltjük fel a szerverre. Egy másik, elegáns megoldás, ha a GZIP által tömörített és tömörítetlen formában is tároljuk a fájlokat. A böngésző felé pedig attól függően küldjük a tömörített vagy tömörítetlen formában, hogy az melyiket tudja lekezelni.

Az alábbi .htaccess fájlban is megadható beállítás ezt valósítja meg.

# Gzippelt fájlokat előnyben részesítő .htaccess fájl
RemoveType      .gz
AddEncoding     gzip    .gz
Header          set     Vary    "Accept-Encoding"

RewriteEngine   On
RewriteBase     /
RewriteCond     %{HTTP:Accept-encoding} gzip
RewriteCond     %{REQUEST_FILENAME}.gz  -f
RewriteRule     ^(.*)$                  $1.gz   [L]

A fenti beállítások megléte esetén, már csak fel kell töltenünk a tömörítetlen fájlok mellé a Gzippel tömörített verziót is (.gz kiterjesztéssel). Tehát, ha egy valami.bmp mellett létezik egy valami.bmp.gz is, és a böngésző képes fogadni azt, akkor a webszerverünk a tömörített verzióval fogja megörvendeztetni azt.

A tömörítést akár a szerveren is elvégezhetjük, ha van shell hozzáférésünk.

Például a következő paranccsal:

gzip -9 -k *.bmp

A „Vary: Accept-Encoding” sor elsősorban a proxyk miatt szükséges, mert enélkül a Gzipelt tartalmat olyan kliensek felé is küldené esetlegesen, amelyek a Gzippel tömörített tartalmat nem tudják feldolgozni.