Jak zvýšit inteligenci mazání cache v Drupalu a ve výsledku mít rychlejší web

Ať už použijete výchozí cache Drupalu nebo sáhnete po nějakém doplňkovém modulu poskytujícím vlastní řešení, tak ve většině případů bude vyprazdňování cache řízeno časovým intervalem. To ale v praxi na větším webu není žádoucí stav. Lze to však snadno napravit.

Výchozí cache v Drupalu ukládá celé objekty jako jsou články, stránky, uživatele nebo komentáře do speciálních databázových tabulek. Nemusí tak pracně sbírat data k jednotlivým políčkům v článku z několika samostatných tabulek v databázi a jen čas od času si tyto posbírané informace aktualizuje.

Do Drupalu můžete doplnit i další cacheovací moduly. Authcache přidá podporu pro cacheování i u přihlášených uživatelů. Dovede cacheovat celé výstupní HTML, nejenom části PHP objektů, takže zpracování stránky je o to rychlejší. File Cache zase údaje o cache ukládá do souboru, místo do databáze, což někdy může rychlosti značně pomoci. A hlavně to sníží nároky na databázi, což oceníte nejen na slabším hostingu.

Existuje také celá řada modulů podporujících serverové cacheovací technologie, v čele s Memcache a Varnishem.

Ať už si cacheování v Drupalu vyšperkujete jakkoli, budete odkázáni na jednu docela hloupou vlastnost. Pro cacheování si nastavíte čas, po který má být sestavená cache používána. Až poté dojde k jejímu přepsání aktuální verzí. V praxi to znamená, že interval cache nastavíte například na hodinu a veškeré změny v článcích se projeví až poté. Stejně tak se po tomto intervalu zobrazí nově zadané komentáře.

Některé kombinace cache to řeší tak, že po aktualizaci je cache článku automaticky aktualizována. Ale totéž se už netýká například titulní strany webu. Takže někdo má cache nastavenu například na 6 hodin, protože web neaktualizuje příliš často. Vydá článek například v osm ráno a článek se na titulce webu objeví až ve dvě odpoledne.

Podobným problémům lze naštěstí snadno předejít a mít přitom nastaven velký interval pro aktualizaci cache. Položky v ní umístěné tam budou moci setrvat delší dobu, web je nebude muset aktualizovat tak často a bude tím pádem rychlejší. A přitom, když u něčeho dojde ke změně obsahu, pak se daná část cache zaktualizuje ihned. Řešení přináší modul Cache Expiration.

Jak nastavit Cache Expiration a správnou aktualizaci cache?

Zmíněný modul se postará o to, aby se po nějaké změně na webu aktualizovala příslušná část cache, u které to má smysl, a to ihned po proběhnutí této změny. Nikoli, až na to přijde čas dle nastaveného intervalu.

Cache Expiration si rozumí jak s výchozí cache v Drupalu, tak s doplňkovými či alternativními cacheovacími moduly jako jsou Boost, Authcache, Varnish nebo Memcache.

Je důležité si uvědomit, že při nastavení cache musíte vzít v potaz vždy daný konkrétní web. Někdy je po změnách v obsahu potřeba vyprázdnit i jinou, než titulní nebo obsahovou adresu. Podle toho, co daný web kde zobrazuje. Jindy je zase žádoucí reagovat i na mazání obsahu. A jindy zase je zbytečné aktualizovat cache titulky, protože jsou na ní jen neměnné informace.

Výše uvedené tipy na nastavení proto berte jen jako předlohu, nikoli pevný mustr, kterého je třeba se držet. Do komentářů mi můžete napsat, jaké cacheovací moduly používá váš web. Držíte se jen a pouze výchozí cache v Drupalu?

Tagy

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

Stále jedu na Drupalu 6. Nemohl jsem akceptovat hlavně první načtení webu na Drupalu 7, také administrace je mnohem pomalejší. Bude na tom Drupal 8 lépe, nebo se jako každá verze zpomalí?

Testoval jsem na VPS u Wedosu, se známým jsme nedokázali pomalost D7 vyřešit, tedy on to vyřešil přes Aegir, to mi nevyhovuje.

Na načtení tohoto článku jsem teď čekal řadu sekund. Drupal 7...

Profile picture for user Jan Polzer

Kontroloval jsem teď u sebe i na vzdálených PC a Maxiorel se mi načítá rozhodně rychleji než řadu sekund. Možná je chyba jinde.

Problém prvního načtení Drupalu 7 a dlouhé doby je obvykle v tom, že na web koukáte sám a on standardně spouští cron coby součást načtení stránky. No a pokud to nepadne na někoho jiného, pak to zpomaluje načítání admina, který web vyvíjí. Je to podobné, jako když do D6 doinstalujete modul Poormanscron. Jde to samozřejmě obejít a cron spouštět externě.

D7 je jinak náročnější na dtb než Drupal 6. Hlavně kvůli přítomnosti Fields, což je stav kdy do D6 doinstalujete CCK.

Záleží na konkrétní implementaci, nastavení serveru, cacheování i na tom, jak velká je daná stránka sama o sobě. Zkuste si nahodit třeba modul Devel a sledovat, kolik času zabírá sestavení stránky na serveru.

Rychlost D8 jsem zatím na žádném reálném webu neměřil. S administrací problém nemám.

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