headerbanner

Urychlení Joomly 1

I nejnovější Joomla 2.5 ignoruje, že Google lépe hodnotí rychlejší weby. A nejde jen o pořadí, Joomla "natlačí" do mobilů s přenosovým limitem nesmyslný objem dat, takže ukrajuje z paušálu uživatele, což je v Česku s nízkými limity přenesených dat dost nešťastné. Poměrně jednoduše jde napravit aspoň to nejhorší.

 Úprava souboru .htaccess

Nejjednodušší, co můžete udělat, je úprava souboru .htaccess, i když to z větší části nesouvisí přímo s Joomlou. Je potřeba se přesvědčit, že server generuje správné hlavičky souborů a může tak používat rychlejší cache paměti, klient pak nemusí vše stahovat z disku. Je třeba, aby v odpovědi na požadavek statického obsahu (obrázky, css, javascript, fonty) bylo sdělení o vypršení platnosti obsahu - řádek Expires. Za předpokladu, že hosting s Apache řízení podle .htaccess povoluje (což je běžné) a že sám již správné hlavičky neposílá (také běžné), najděte v kořenovém adresáři webu soubor .htaccess a vložte do něj například:

ExpiresActive On
ExpiresByType image/jpeg A26611200
ExpiresByType image/gif A26611200

Rozhodněte, které soubory a jak dlouho chcete cachovat, uvedená hodnota ve vteřinách odpovídá 11 měsícům (neměla by být delší než rok, aby neporušovala pokyny RFC).

První za ExpiresByType je MIME typ souboru, v prvním řádku jde o jpg obrázky, druhý údaj je expirace od data připojení.

Expiraci nastavte pro všechny statické MIME typy, které se na stránce vyskytují. V prvním přiblížení to jsou všechny typy obrázků (nezapomeňte na ikonu v adresním řádku prohlížeče favicon.ico - MIME typ vnd.microsoft.icon).

Když si vyzkoušíte, jak všechno krásně na pokyny v .htaccess reaguje (v uvedeném zdroji klikněte na graf a na další stránce dole uvidíte HTTP komunikaci včetně časů expirace), můžete se naštvat, že se to dalo udělat i jednodušeji, třeba:

<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|swf|mp3|mp4)$">
 Header set Cache-Control "public"
 ExpiresDefault A26611200
 Header unset Last-Modified
Header unset ETag
FileETag None
</FilesMatch>

Druhý příklad obsahuje řádek se zákazem údaje Last-Modified a dva řádky pro eliminaci Etagu, sloužících k jednoznačné identifikaci souboru - cílem je redukce komunikace mezi prohlížečem a serverem. Neprobíhá pak dotaz na poslední modifikaci If-Modified-Since. Kdo si chce hrát, může vyzkoušet různé kombinace, a když si nainstaluje Yslow nebo livehttpheaders, může hlavičky pohodlně sledovat v prohlížeči.

POZOR!!! Direktiva FilesMatch v uvedeném příkladu definuje přípony souborů, pro které pravidla platí. Je však "case sensitive", takže zachytí sice .jpg soubor, ale ne .JPG! Naprostá většina příkladů na inetu se o tom nezmiňuje. Pro "zachycení" souborů bez ohledu na velikost znaků v příponě použijte

<FilesMatch "(?i)\.(ico|pdf|flv|jpg|jpeg|png|gif|swf|mp3|mp4)$">

Dalším nastavením je expirace a komprese pro CSS a js soubory. (Obrázky kompresi nepotřebují,  jpg je sama o sobě komprese). Jak jste na tom s kompresí si můžete vyzkoušet buď na dříve uvedeném odkazu nebo rychleji zde - ale tady musíte vkládat celou adresu souboru, pro který kompresi zjišťujete, tedy například www.example.com/style.css.

Když zjistíte, že soubory komprimované nejsou, uvedete v následující sekci oba řádky. Pokud již komprimované jsou, stačí koncovku .css a .js přidat do předchozího příkladu:

<FilesMatch "\.(js|css|eot|ttf)$">
SetOutputFilter DEFLATE
ExpiresDefault A26611200
</FilesMatch>

Nezapoměňte na stahované fonty, v uvedeném příkladu jsou to soubory s koncovkami ttf a eot (i když - je lepší se bez nich obejít a pro stránky je nepoužívat - často jsou jen pro ozdobný nápis v hlavičce...).

Cachování obsahu lze zajistit nejen nastavením hlavičky Expires, ale i:

Header set Cache-Control "max-age=7257600"
Podle tohoto zdroje je ale Expires doporučenější a nikdy by se něměly používat oba způsoby najednou.

Protože uvedená nastavení .htaccess platí jen pro soubory stahované z disku, je nutné si ještě pohrát s obsahem, který generuje přímo Joomla. Nastavte tedy GZIP kompresi přímo v administraci Joomly v sekci "Globální nastavení" a první fáze urychlování je dokončena.

Když tohle všechno provedete, je to základ pro další práci - a téma pro příští díl. Každopádně už teď je objem textových dat (HTML, CSS, js...) třeba jen 30 procent původní hodnoty. Obrázky, CSS a javascripty pak získává prohlížeč rychleji z cache paměti.