CakePHP ma opinię wolnego frameworka, potrzebującego wielu zasobów serwera. Nie dziwi to tych, którzy znają założenia twórców tego projektu: CakePHP miał ułatwić pracę programistom, a ponieważ hardware jest tani, nie trzeba się specjalnie martwić o performance. Są jednak sytuacje, kiedy zależy nam jednak na maksymalnej wydajności naszej aplikacji. Jest kilka sposobów na przyśpieszenie Cake’a.

  1. Ustawienie trybu debug na 0 i wyłączenie Cache.disable.
    Każdy serwis działający w trybie produkcyjnym powinien działać w tym trybie. Nie tylko dlatego, że ewentualne błędy ukrywane są przez użytkownikami, ale pewne ustawienia aplikacji zapisywane są w cache (o ile nie wyłączymy tego mechanizmu ustawiając Cache.disable). W katalogu /tmp/cache/models zapisywane są informacje o wszystkich modelach (pobierane przez DESCRIBE). Drugą ważną rzeczą zapisywaną w katalogu /tmp/cache/persistent jest m. in. struktura plików aplikacji. Generowanie jej za każdym razem w pozostałych trybach debogowania jest bardzo czasochłonną operacją.
  2. Cache zapytań w modelu.
    W modelu znajduje się właściwość $cacheQueries, której ustawienie na true powoduje, że zapytania do bazy wykonywane są jednokrotnie (http://book.cakephp.org/view/445/cacheQueries).
  3. Cache modeli w kontrolerze.
    Kontroler potrafi także zapisać informacje o używanych przez niego modelach. Podobnie jak wyżej wystarczy tylko zmienić jedno pole w kontrolerze o nazwie $persistModel. Dane o modelach przechowywane są w katalogu /tmp/cache/persistent.
  4. Klasa Cache.
    Za pomocą tego obiektu można zapisać dowolną zmienną na określony czas. Na przykład jeśli generujemy drzewo menu strony do tablicy, można zapisać ją na 999 dni. Przy zmianie struktury wystarczy zmienić tylko tablicę w cache’u. Więcej informacji na stronie http://book.cakephp.org/view/764/Cache.
  5. Cache widoków.
    Do zapisywania gotowych stron lub ich części wykorzystywany jest helper Cache. Prócz złączonego mechanizmu cache’owania, wymaga jeszcze ustawienia Cache.check na true w configu. W kontrolerze trzeba oczywiście dołączyć ten helper oraz w $cacheAction ustawić czas przez jaki dana akcja powinna być przechowywana w cache. Jeżeli część widoku może się zmieniać np. menu użytkownika, można wyłączyć kawałki kodu stosując bloki <cake:nocache>.
    Widoki przechowywane w cache’u są generowanie ponownie jeśli w modelach wykorzystywanych przez dany kontroler zostały wykonane akcje INSERT, UPDATE lub DELETE. Dzięki temu dane są zawsze aktualne. Można także ręcznie wyczyścić cache stosując metodę Cache::clear() (http://book.cakephp.org/view/213/Cache).

Standardowo wszystkie cachowane dane zapisywane są w plikach. Istnieje jednak możliwość użycia APC, XCache lub memcache jako alternatywnych mechanizmów przechowywania danych.

Są jednak sytuacje kiedy nawet te metody mogą nie wystarczyć. Jeżeli mamy stronę o bardzo dużej odwiedzalności, ale rzadko zmieniającą się, można ją zapisać do zwykłej strony (X)HTML. Taką funkcjonalność należy oczywiście napisać np. w systemie CMS. Nie jest to jednak specjalnie trudne. Załóżmy, że mamy model Post i akcję np. /posts/view/21 z widokiem przykładowego posta. Po wykonaniu modyfikacji, wystarczy usunąć zapisaną wcześniej stronę a następnie np. przez cURL pobrać dynamicznie wygenerowaną stronę pod adresem  /posts/view/21 i zapisać plik do katalogu /posts/view/21 pod nazwą index.html. Przy odwołaniu do tej strony mod_rewrite przekieruje do zapisanej strony HTMLowej zamiast wykonać akcję przez CakePHP. Zaletą tego rozwiązania jest to, że nie trzeba nawet zmieniać linków w serwisie. Trzeba tylko pamiętać, żeby przez pobraniem strony przez cURL, najpierw usunąć plik.

poniedziałek, 30 Listopad 2009 
Tagi: ,
Kategoria: CakePHP
Możesz śledzić ten wpis przez RSS 2.0 lub dodać komentarz.
Zostaw komentarz

Home Home O mnie O mnie Efekty
JavaScript, jQuery, AJAX
Efekty
Inspiracje
Ciekawe strony WWW
Inspiracje
Programowanie
CakePHP, PHP, MySQL
Programowanie
SEO
Wyszukiwarki
SEO
Web Building
HTML i CSS
Web Building
Linki Linki Kontakt Kontakt