Cache bez bazy danych i dla zalogowanych?

15 Marzec, 2011 - 22:09

Standardowo system cachowania stron w Drupalu jest realizowany z użyciem bazy danych, ale istnieje także możliwość aby cachowanie czy raczej przetworzone już strony były zapisywane nie w bazie a w postaci plików na naszym serwerze. Taką możliwość daje nam moduł Cache Router, który wymaga od nas:
1) wgrania na serwer.
2) włączenia na stronie z modułami w panelu zarządzania.
3) dodania do pliku settings.php specjalnego kodu - podany w pliku readme.txt tego modułu.

Cache Router umożliwia także skorzystanie z akceleratorów PHP jak APC czy MemCache, ale do tego już "pewna" wiedza jest wymagana ;)
________________________________

Natomiast odnośnie cachowania stron dla zalogowanych, pomoże nam moduł Authenticated User Page Caching (Authcache), dzięki któremu zarówno gościom jak i zalogowanym użytkownikom (z wyjątkiem głównego administratora) będzie "serwowana" strona z cache'u. Tu także zachodzi potrzeba edycji pliku settings.php i dodania odpowiedniego kodu (podany w pliku readme.txt tego modułu).
________________________________

A skoro mowa o wydajności, przy okazji kilka wskazówek i modułów.

Content Refresh - zadaniem modułu jest "odświeżenie" (czyt. usunięcie z cache'u) pod strony na której został dodany komentarz oraz strony głównej jeżeli dodawana/usuwana zawartość w opcjach publikacji ma "na stronie głównej" - moduł nie działa jeżeli korzystamy z Cache Router i cachowania na plikach. Dzięki temu modułowi możemy wydłużyć czas regenerowanie cache'u.

----------

Nie wiele osób wie, że dość popularny moduł PathAuto z czasem daje o sobie znać w postaci dużej ilości zapytań do bazy danych, a to owocuje spowolnieniem ładowania się strony. Dlaczego tak się dzieje ? Dla przykładu: strona główna -> menu główne i dodatkowe + skróty naszych newsów czy innych treści + np: blok z popularnymi artykułami = kilkadziesiąt adresów w postaci "node/..." dla których są sprawdzane aliasy. I tu uwaga... w osobnych zapytaniach do bazy danych, co w przypadku dużej oglądalności i dość limitowanej max. ilości zapytań do bazy owocuje... sami wiecie. Ale ukojenie dla bazy danych oferuje moduł Path Cache, który te kilka, kilkanaście lub kilkadziesiąt zapytań zamienia na... jedno zapytanie - jest różnica ? Korzystam z tego modułu na swojej stronie i powiem wam jedno - różnica w szybkości znaczna (lub może mi się tak wydaje :D ). Wymaga naniesienia zmian w pliku path.inc w katalogu include.

----------

Drupal jest dość pamiętliwy i np: sesję poszczególnych użytkowników pamięta przeszło 20 dni (skrócić czas może w pliku settings.php wartość session.cookie_lifetime), a teraz doliczcie do tego sesje dla zwykłych gości i robotów indeksujących = tabela session nabiera wówczas sporych rozmiarów pod względem kolejnych wierszy jak i wagi. Rozwiązanie ? Moduł No Anonymous Sessions czyli brak sesji dla gości. Moduł jednak nie zalecany gdy mamy włączoną możliwość rejestracji/zakładania kont.

----------

Sporo o tym cachowaniu, ale teraz przychodzi na myśl pytanie co z samą bazą danych ? Co z nadmiarem danych (dodatkowe KB przy tabelach w których dość często są usuwane i dodawana dane) i jej wydajnością ? Tutaj warto wspomnieć o module DB Maintenance, który przy każdym uruchomieniu zadań CRON optymalizuje wszystkie lub wybrane tabele.

----------

A skoro mowa o zadaniach CRON, jeżeli chcecie wiedzieć ile trwa wykonanie wybranego zadania lub np: wyłączyć niektóre z tych zadań (przy niektórych ustawieniach danego modułu, dodawane przez niego zadanie/zadania są zbędne) przyda wam się moduł SuperCron. Wymaga podmiany pliku cron.php na supercron.php (który znajduje się z paczce z modułem). Warto wspomnieć o innej dość ciekawej funkcji jaką oferuje ten moduł - blokada wywołania pliku cron.php przez osoby z zewnątrz (tak drodzy drupalowicze, ktoś obcy może wam uruchomić zadania CRON'a). Możemy ustawić, że tylko z danego IP będą uruchamiane zadania - jeżeli włączymy tą opcję, należy wprowadzić IP serwera który plik cron.php będzie uruchamiał i oczywiście nasz IP.
________________________________

Mam nadzieję, że przydadzą wam się wymienione powyżej moduły. Jeżeli natrafię na jeszcze jakiś/jakieś "pomocne" moduły, będziecie mogli o nich przeczytać krótkie wzmianki w newsach na Drupal.pl.

Przemysław Matras

Zafascynowany możliwościami jakie zapewnia niebieska kropla jak i zafascynowany przeobrażaniem WordPress'a w pełnowymiarowego CMS'a. Obserwuje, czyta i przyswaja treści w temacie wspomnianych systemów treści przy dźwiękach muzyki Depeche Mode & Recoil.