W3 Total Cache, WP Super Cache, Authcache, File Cache. Zrychlete si WordPress a Drupal

Redakční systémy závislé na databázích nejsou obecně žádný rychlík. Zvlášť tedy v kombinaci, kdy mají velké množství obsahu a běží na sdíleném hostingu. Řešení pro WordPress v podobě W3 Total Cache je docela známé, u Drupalu a jeho Authcache si ale nejsem jist, proto vám dnes obojí představím.

Nedávno jsem tu měl článek, ve kterém jsem porovnával rychlost českých hostingů, co se přístupu k databázi MySQL týče (plus SQLite a soubory). Rozdíly byly, zajímavé je pak sledovat rychlost přístupu skriptů k velkým databázím. Což jsou na poměry hostingů takové, které mají řádově stovky megabajtů.

Zaujalo mě i výrazné zrychlení při porovnání MySQL uložené na klasickém disku a na serveru s SSD. Díky vstřícnosti Wedosu se třeba Maxiorel.cz stal bleskurychlý a doufám, že mu to vydrží. Problém je v tom, že když se uživatel do Drupalu přihlásí, pak se jej standardní cacheovací mechanismus netýká a web je výrazně zpomalený. Leckdy to působí kontraproduktivně – proč by se měl někdo přihlašovat a registrovat na web, když tím přijde o rychlé načítání.

Naštěstí lze i tento problém vyřešit. Drupal stejně jako WordPress obsahuje řadu modulů (resp. pluginů), které zajistí rozšířené cacheování a mohou data cache přesunout z databáze na disk. Zejména u velkých webů pak může být taková cache rychlejší. Navíc, máte-li vlastní server, lze složku s cache namapovat jako ramdisk, což je opět výkonově úplně někde jinde.

WordPress a WP Super Cache

Přestože je v nadpisu a úvodníku článku zmíněn plugin W3 Total Cache, já bych vám rád představil jiný, dle mého názoru rovněž zajímavý a o něco lepší. A minimálně dle počtu stažení i oblíbenější. Souborový cacheovací plugin pro WordPress se instaluje velice jednoduše. V administraci v seznamu pluginů vyhledáte WP Super Cache a aktivujete jej.

V administrační sekci Nastavení > WP Super Cache Settings pak nastavíte, jak se má tento cacheovací plugin chovat. Zajímat vás bude především nastavení Caching on/Caching off. Pokud na webu změníte něco v šabloně a budete chtít ihned vidět úpravu, pak zde využijete tlačítko Delete Cache.

V pokročilém nastavení pluginu je dále možné upravit chování cache tak, aby se na ni uživatel přesměroval rovnou pomocí souboru .htaccess a tedy nedocházelo k sebemenšímu zdržení zpracováváním PHP skriptu. Je o také místo, kde nastavíte délku uchovávání cache a cesty, které chcete z cache vyjmout.

Opravdu velké weby využijí spolupráci WP Super Cache s CDN pro rychlejší načítání webu z různých míst na světě.

Wp Super Cache

Web s nasazeným pluginem WP Super Cache je cacheován samozřejmě i pro přihlášené uživatele. To u Drupalu při zapnutí standardního cacheovacího pluginu samozřejmé není.

Drupal, Authcache a Filecache – cacheování pro přihlášené a do souborů

Drupal obsahuje už ve svém základu cacheovací mechanismus. V nastavení Konfigurace > Vývoj > Výkon je možné zapnout minimální a maximální dobu uložení stránky v cache, cacheování bloků a agregaci CSS a JavaScriptu (to má vliv na přenos dat, ale při dnešních rychlostech už ani ne tak na načtení webu, teď se bavme jen o zpracování webu na serveru).

Nevýhoda standardní cache v Drupalu je ta, že pokud se do webu přihlásíte, pak se vám stránky cacheované nezobrazují. Tím pádem jejich načtení trvá déle, neboť je Drupal vždy skládá z jednotlivých údajů v databázi. Pokud je stránka cacheovaná, jen si z databáze vezme již hotové HTML.

Protože cache v databázi může být na sdíleném hostingu při velkém objemu dat problém, existuje řešení, jak cache načítat ze souborů. Na serveru pak můžete složku pro tyto soubory namapovat třeba do ramdisku. Pokud o ně přijdete, nic se neděje, Drupal je vyrobí znovu. Takže ramdisk na dostatečně dimenzovaném serveru je na to ideální. Ale i cache v souborech pomůže.

A dobrá zpráva je, že existuje i řešení, jak Drupal donutit, aby cacheoval stránky i přihlášeným uživatelům.

Stáhněte a zapněte tyto moduly:

Po zapnutí modulů si otevřete svůj soubor sites/default/settings.php a na jeho konec přidejte tyto řádky:

$conf['cache_backends'][] = 'sites/all/modules/filecache/filecache.inc';
$conf['cache_backends'][] = 'sites/all/modules/authcache/authcache.inc';  $conf['cache_class_cache_page'] = 'DrupalFileCache';

Poté přejděte do nastavení Konfigurace > Vývoj > Výkon > Authcache. Zapněte, pro které uživatelské role chcete cache aktivovat. Při prvním takovém nastavení ještě zapněte volbu pro odhlášení všech uživatelů, aby se jim cacheování správně aktivovalo.

Authcache

Doporučuji vypnout cache pro AJAXové požadavky a případně si zapnout volbu Benchmark database queries spolu s uvedením uživatelského jména administrátora. Pak v rohu obrazovky uvidíte informaci o tom, jak vám Authcache funguje. Pokud máte na webu nějaký dynamický obsah, pak asi nechcete, aby se cacheoval. Jeho adresu v relativním tvaru uveďte do seznamu na kartě Page caching settings v nastavení Authcache.

Informace o Authcache

Zajímavá je kombinace necacheovaného AJAXu s bloky, které mají dynamický obsah na cacheované stránce. V takovém případě stačí jít do nastavení bloku a zapnout v něm volbu Load block with Ajax on cached Authcache pages. Pak budete mít stránku v cache, ale blok s dynamickým obsahem na ni bude načten AJAXem a tedy bude neustále aktuální.

Jak změnit složku pro File Cache

Modul File Cache není nezbytný. Pokud zapnete Authcache bez něj a vynecháte první z výše uvedených řádků pro settings.php, pak bude Authcache fungovat standardně s databází a tabulkami cache_*. Pokud však tento modul aktivujete, možná budete marně hledat nějaké jeho nastavení.

To je v pořádku, momentálně žádné nemá. Přesto je ale způsob, jak změnit složku, do které se ukládají cacheované soubory. Doplňte na konec souboru settings.php tento řádek:

$conf['filecache_directory'] = '/tmp/filecache-' . substr(conf_path(), 6);

Místo tmp stačí uvést absolutní cestu k jiné složce, například do toho ramdisku, jak jsem zmínil výše. Ta druhá část složky v příkladu pracuje s doménami webu, takže toto řešení funguje i pro multidoménový web.

Uvádět cestu ke složce pro cache ale není nutné. Pokud tak neučiníte, File Cache si vytvoří složku .ht.filecache v umístění pro soubory Drupalu, tedy obvykle v sites/default/files.

Vyzkoušel jsem Authcache na několika webech a pokud nedošlo k problému s její aktivací vlivem jiných chyb na webu, pak funguje bezvadně. Jen u stránek, kde máte nějaký dynamický obsah je potřeba vše správně nastavit a načítat některé bloky AJAXem.

Buďme ve spojení, přihlaste se k newsletteru

Odesláním formuláře souhlasíte s podmínkami zpracováním osobních údajů. 
Více informací v Ochrana osobních údajů.

Autor článku: Jan Polzer

Tvůrce webů z Brna se specializací na Drupal, WordPress a Symfony. Acquia Certified Developer & Site Builder. Autor několika knih o Drupalu.
Web Development Director v Lesensky.cz. Ve volných chvílích podnikám výlety na souši i po vodě. Více se dozvíte na polzer.cz a mém LinkedIn profilu.

Komentáře k článku

návštěvník

Podnětný článek, stránky parádně zrychlily. Ovšem potřeboval bych malou radu jak zprovoznit modul Fivestar. Bez Authcache funguje normálně, ale jak jej zapnu hodnocení se neuloží. Předem dík za radu 
O. 

Profile picture for user Jan Polzer

Bohužel Fivestar a hlasování obecně je problém, které si nerozumí s cacheováním. V nastavení Authcache by se asi dala vymyslet nějaká cesta, kterou Fivestar (resp. Voting API) používá, aby ji Authcache ignoroval. Ovšem pak to ještě chce, aby se po hlasování vyprázdnila cache stránky, na které došlo k hlasování, jinak se při dalším načtení neukáže aktuální stav hlasování.

Možná bych to zkusil udělat tak, že hlasovací prvky budou v nějakém bloku a ten se pak už dá jednoduše proměnit na Authcache blok volaný AJAXem po načtení stránky - bude tedy ukazovat stále aktuální hodnoty.

návštěvník

Dobrý den, jak to nastavit na nginx serveru?

návštěvník

To - mysleno authcache :-). Obecne cokoli vyzaduje zasah v htaccess se pak nejak musi resit jinak u nginx. Nainstaloval jsem authacache a web mi zamrzl, bez nejakych error hlaseni. 

Profile picture for user Jan Polzer

No, já jsem Authcache a nginx dohromady sice nezkoušel, ale jelikož Authcache žádný zásah do .htaccess nepotřebuje, tak by měl šlapat. Vy tu někde vidíte info, že by to zásah do .htaccess chtělo? Takovou úpravu potřebuje jiný cache modul pro Drupal, a sice Boost. Ale právě kvůli tomu Boost nepoužívám.

návštěvník

Dobrý den, 
nedávno vyšla aktualizace (7.x- 2.0.-beta1). Rád bych na ní aktualizoval v poznámkách píší, že vyřešili můj problém s Fivestar. 
Ovšem v aktualizacích se mi tato verze nenabídne, když chci přidat noví modul objeví se hláška modul je již nainstalován. Tak ho zkusím odinstalovat a hláška je tam pořád. Zkusil jsem modul i odebrat úplně a to mi shodilo celé stránky. 
Je nějaká možnost jak aktualizovat bez odebrání modulu? 

Předem děkuji za radu
O.
 

Profile picture for user Jan Polzer

Jasně. Pokud chcete aktualizovat ze stabilní na vývojovou verzi, je potřeba to udělat ručně. Tedy si modul stáhnout, v počítači rozbalit a složku authcache nakopírovat třeba přes FTP do sites/all/modules a přepsat tu původní.

Přidat komentář

Odesláním komentáře souhlasíte s podmínkami Ochrany osobních údajů

reklama
Moje kniha o CMS Drupal

 

Kniha 333 tipů a triků pro Drupal 9


Více na KnihyPolzer.cz

Sledujte Maxiorla na Facebooku

Maxiorel na Facebooku

Hosting pro Drupal a WordPress

Hledáte český webhosting vhodný nejenom pro redakční systém Drupal? Tak vyzkoušejte Webhosting C4 za 1200 Kč na rok s doménou v ceně, 20 GB prostoru a automatické navyšováním o 2 GB každý rok. Podrobnosti zde.

@maxiorel na Twitteru

Maxiorel na Twitteru