Opis optymalizacji stron opartych na szablonach SMARTY, przedstawienie prostego systemu buforowania serwisu w celu znacznego przyspieszenia wydajności.
Postaram się opisać prosty system cache w smarty, na początek po co nam buforowanie? Odpowiedź jest prosta zwiększenie szybkości działania serwisu i ogromne odciążenie serwera.
Jeśli dopiero zaczynasz przygodę ze smartami i nie miałeś nigdy wcześniej do czynienia z cache ten przykład pozwoli ci zrozumieć zasadę działania.
1. Jak włączyć cache w smarty
include('libs/Smarty.class.php');//tu tradycyjne pobranie biblioteki smarty
$smarty=new Smarty;
$smarty->caching=1;
$smarty->display('strona.tpl');
?>
Jak widzimy za włączenie cache w smarty odpowiada metoda caching która jest domyślnie wyłączona, po jej włączeniu raz wygenerowana strona będzie pobierana z katalogu cache a nie ponownie generowana od początku.
2. Przykład strony aktualizującej sie co godzine, lub po zmianie pliku konfiguracyjnego
include('libs/Smarty.class.php');//tu tradycyjne pobranie biblioteki smarty
$smarty=new Smarty;
$smarty->caching=1;
$smarty->compile_check = true;//sprawdza czy plik szablonu lub konfiguracja uległy zmienie
$smarty->cache_lifetime=3600;//czas życia pliku w cache 1 godzina
$smarty->display('strona.tpl');
?>
3. Buforowanie tylko wybranej części szablonu
To jedno z częściej stosowanych typów buforu smarty, pozwala ono na buforowanie w określony sposób wybranych części szablonu.
include ("libs/Smarty.class.php");
$smarty = new Smarty();
$smarty->caching = 1;
$smarty->use_sub_dirs = TRUE;//ten parametr rozbija pliki cache na podkatalogi dzięki czemu odczyt jest szybszy niz gdyby wszystkie pliki były w jednym katalogu
if(!$smarty->is_cached('naglowek.tpl','naglowek')){
//tutaj sprawdzamy czy nagluwek jest juz w cache jeśli nie musimy wygenerować kod poprzez php
jakasFunkcjaGenerujacaNaglowek();
}
$smarty->display("naglowek.tpl",'naglowek');
//Naglowek jak wiadomo nie zmienia sie na stronie ale juz np panel użytkownika tak, wiec aby móc go zapisac w cache musimy podac parametr po którym smarty rozpozna kto powinien otrzymać danyc plik z pamięci podręcznej cache oto jak to zrobić
$user = 'igor'; // to jest nasz indentyfikator uzytkownika ustawiam go przykładowo na igor
//teraz sprawdzamy czy jest plik dla tekiego użytkownika w cache jeśli nie musimy wykonać funkcje generującą jego menu aby móc poźniej odczytywac juz z cache
if(!$smarty->is_cached('menu','menu|'.$user)){
jakasFunkcjaDoGenerowaniaMenu();
}
$smarty->display("menu",'menu|'.$user);
?>
4. Usuwanie plików z buforu dla konkretnego usera oraz czyszczenie całkowite.
$smarty->clear_cache(null,'menu');//całkowite czyszczenie bufora dla modułu menu
$smarty->clear_cache(null,'menu|'.$user);//czyszczenie tylko bufora modułu menu dla uzytkownika $user
?>
Listing
Ranga: Administrator serwisu Punktów: 0