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.

Reklama

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: 

Reklama

Komentáře

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...

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.

Tvořím weby. Nabízím poradenství pro Drupal. Jsem na Twitteru.

Přidat komentář