Daniel Częstki

jestem OK

Smarty i cache-owanie na podstawie nowej wersji serwisu Artelis.pl

Rozpocząłem prace programistyczne nad nową wersją serwisu Artelis.pl. Niestety Ze względu na to iż nowy serwis jest w stadium produkcyjnym nie podam adresu pod którym można go zobaczyć.
Niemniej jak tylko będzie taka możliwość na pewno adres taki się pojawi w tym poście.

W pierwszej kolejności zaprojektowałem nowy szablon graficzny, który niestety nie jest jeszcze skończony. Mamy (wspólnicy) ciut inne wizje dotyczące kolorów ;) Żeby nie tracić czasu na nie kończące sie spory ;) postanowiłem przejść do programowania.

Główne założenie w nowej wersji Artelis.pl to oddzielenie logiki aplikacji od prezentacji. Za prezentację odpowiada Smarty, a jako logikę aplikacji stosuję mini ;) MVC. Piszę “mini” bo nie jest to w pełni obiektowe MVC. Kontroler jest napisany proceduralnie, aczkolwiek przy operacjach bazodanowych stosuję klasę PEAR::DB. Niemniej ubolewam nad tym iż od początku do końca nie jest to OO ale jakoś nigdy nie było czasu na przestawienie się w pełni na programowanie obiektowe.
Ale powoli się do tego przymierzam. Zastanawiam się nad wyborem framework’a do nauki. Prawdopodobnie będzie to Symfony lub Prado.

Powróćmy jednak do Artelis.pl

Co jest zrobione ?
1. Zaprogramowany główny kontroler, który steruje serwisem.
2. Włączone cache-owanie do HTML stron serwisu na podstawie danych kontrolera.

Szablon, szablony, SMARTY.
Smarty to jeden z wielu, ale chyba najbardziej popularny i najstarszy system szablonów. Nauczyłem się go jakiś rok temu. Do dziś pamietam decyzję o zastosowaniu systemu szablonów w projektach internetowych i była to jedna z lepszych decyzji jaką mogłem podjąć.

Smarty umożliwia odseparowanie logiki aplikacji (PHP) od jej warstwy prezentacyjnej (HTML).
Smarty umożliwia umieszczanie w szablonach znaczników, które następnie są zastępowane generowanymi przez aplikację danymi. Dane są przekazywane do systemu poprzez metody mapujące. System Smarty cechuje się wysoką funkcjonalnością, którą można rozszerzać poprzez tworzenie własnych funkcji.

Spotkałem się ze stwierdzeniem, iż kod PHP wygenerowany przez Smarty jest “kiepski” i wolno działa. Na pewno nie jest kiepski, jednak optymalny też nie, co wpływa zapewne na szybkość generowania stron, ale nie od dziś wiadomo, że od automatu nie można się spodziewać cudów. Jest to mniej więcej tak samo, jak tworzenie stron za pomocą kreatorów.
Nie zmienia to jednak faktu, iż Smarty pozwala robić większość rzeczy związanych z ingerencją w sferę wizualną diametralnie szybciej i przyjemniej niż gdybyśmy musieli napisać kod od podstaw. Poza tym szablony pozwalają nam zachować spójność kodu.

Ciut o cache-owaniu w SMARTY.

Standardowo w Smarty włączona jest tylko kompilacja kodu Smarty na kod PHP. Wynik kompilacji zapisywany jest do pliku, który następnie jest parsowany przez PHP.

Niektórzy nie wiedzą jednak, iż Smarty pozwala stosować mechanizm buforowania w postaci kodu HTML. Co więcej - pozwala określić identyfikator cache-u, co pozwala na buforowanie stron opartych o zakładki, listę stron itp.

Jak działa cache w Smarty ?

Otóż po włączeniu cache w Smarty należy określić katalog do którego będą zapisywane wygenerowane pliki oraz czas jaki ważny jest cache. Musimy zadbać o to, aby identyfikatory kolejnych cache-owanych stron były różne. Określaniem identyfikatora (w moim przypadku) zajmuje się kontroler na podstawie wartości przekazywanych poprzez parametry.

W momencie kompilacji kodu, Smarty dodatkowo tworzy plik z kodem HTML, gdzie na początku kodu dodaje własne informacje, na podstawie których jest w stanie określić np. kiedy strona została zbuforowana i kiedy powinien ją odświeżyć.

Standardowo cache w Smarty ustawiony jest na 3600 s (1H). Po tym czasie Smarty odświeży cache. Wartość tego parametru można oczywiście zmienić. Przy odpowiednim oprogramowaniu kontrolera można ustawić nawet różne parametry czasu cache dla poszczególnych stron. W przypadku artelis.pl czas cache dla listy artykułów ustawiłem na 1 godzinę, ale dla artykułu ustawiłem na 24 godziny.

Wady …
Główna wada i właściwie jedyna, to fakt iż dane pojawiają się z opóźnieniem równym ustawionej długości czasu dla cache-u. Np. jeżeli dla artykułu czas cache ustawiony jest na 24 godziny, to wszelkie zmiany wykonane po stronie bazy danych spowodują iż pokażą się one w momencie odświeżenia cache-u przez Smarty - czyli po upływie 24 godzin.

… którym można zaradzić.
Smarty umożliwia w obrębie jednego pliku .tpl wyodrębnienie struktury, która nie ma być buforowana.
Mechanizm ten można stosować dla elementów wyświetlających np. banery, czy informacje pochodzące z giełdy, które wymagają nowych danych przy każdym odświeżeniu strony.

Zalety buforowania.
Zmniejszenie obciażenia serwera oraz zauważalny wzrost szybkości ładowania się serwisu.

To jeszcze nie koniec.
Postaram się w najbliższej przyszłości pokazać kilka przykładów stosowania buforowania.

Komentarze

Aktualnie 2 komentarzy | dodaj swój komentarz
  1. “Główna wada i właściwie jedyna, to fakt iż dane pojawiają się z opóźnieniem równym ustawionej długości czasu dla cache-u.”

    E… Chyba jest na to rada? Przy każdej zmianie w danych (np. artykule) należy usuwać odpowiadający im plik cache, i już mamy dane aktualizowane w momencie pojawienia się zmian.

    Pozdrawiam.

    Komentarz dodany przez Przemek Szalko dnia 10-11-2007
  2. oczywiście. tak też można, jednak jeżeli serwis zawiera kilka tysiecy artykułów odszukanie własciwego pliku może sprawiać kłopoty :)

    Komentarz dodany przez Daniel Częstki dnia 10-11-2007

DODAJ SWOJĄ OPINIĘ

Najnowsze wpisy