Smarty kontra Fast.Templates

W dzisiejszym wpisie postaram się przedstawić dwa gotowce, których zadaniem jest ułatwienie pracy webmasterowi. Obydwa skrypt (czy też klasy) y robią to samo: na podstawie danych przygotowują treść do wysłania do użytkownika. Jednakże stosują przy tym zupełnie odmienne podejścia. Zobaczycie jak wstępne założenia mogą wpłynąć na działanie ostatecznego produktu.

Fast.Templates

Ten system szablonów przedstawiony został w książce „PHP4 Kurs podstawowy”. Jest dość prosty do opanowania. Osobie przygotowującej kod strony można powiedzieć, żeby odpowiednie miejsca oznaczyła {w_odpowiedni_sposób} i dzięki temu będzie wiadomo co wstawić w to miejsce. Najważniejszymi funkcjami są: przypisanie treści do zmiennych szablonowych (właśnie te słowa w nawiasie klamrowym), wygenerowanie treści ze wskazanego szablonu i przypisanie jej do zmiennej, wyświetlenie wygenerowanej strony, usunięcie przypisanych treści, ustawienie warunku logicznego. Skrypt został przejęty przez pewną firmę, która dodała do niego cache i kilka drobnych usprawnień.  Centralnym elementem skryptu jest funkcja, która w tekście wyszukuje określony ciągu znaków, i która zastępuje go innym ciągiem.

Smarty

Ten skrypt poznałem już bezpośrednio z sieci. Posiada on funkcje przypisywania treści do zmiennych, pobierania treści z wygenerowanych szablonów, cache oraz kilka innych drobiazgów niedostępnych w Fast.Templates. Tworzenie i obsługa szablonów jest zdecydowanie trudniejsza. W szablonie występują pętle, warunki logiczne, przypisywanie wartości do zmiennych, wyrażenia matematyczne itd. Język smarty tak właściwie jest osobnym językiem, którego trzeba się nauczyć. Dodatkowo w szablonach mogą się pojawić takie elementy jak |@count, {wtyczka}, itp. Dodatkowo Smarty wymaga wskazania katalogu z prawami do zapisu.

Do rzeczy

Obydwa skrypty robią dokładnie to samo, ostateczny wynik jest identyczny, ale sposoby dojścia do niego diametralnie się różni. W dużym uproszczeniu Smarty robi to samo, co użytkownik zaczynający przygodę z PHP, a mianowicie łączy funkcje PHP z elementami HTML. Fast.Templates z kolei działa na ciągach znaków i niestety przegrywa w wydajności. Im większy szablon, tym więcej czasu potrzeba na znalezienie wskazanego fragmentu. Kolejnym gwoździem do trumny dla F.T jest liczba szablonów. W przypadku zwykłej tabelki są to minimum dwa szablony: jeden na zrobienie „otoczki”, drugi na wiersze. Jeśli programista chce dodać komunikat o braku danych do wyświetlenia może użyć warunku logicznego (który w Fast.Templates powoduje włączenie/wyłączenie komentarza html) albo kolejnego szablonu. Inny kolor tła co drugi wiersz? Wystarczy rozbudować kod php przypisujący zmienne do szablonu. W przypadku Smarty tabelka przedstawiana jest przy pomocy jednego szablonu (nawet jeśli zamiast niej ma się pojawić komunikat o braku danych), a kod php jest o 2/3 chudszy.

W ramach ćwiczeń przepisałem Fast.Templates do wersji binarnej, czyli jako moduł ładowany do php. Niestety wstępne przewidywania okazały się całkiem słuszne, ponieważ wersja ta była średnio tylko 3.5 raza szybsza od wersji skryptowej. Operacje na napisach nie należą do najszybszych, a jeśli wykonywanych jest wiele operacji na długich ciągach znaków, to wydajność takiego rozwiązania jest niezbyt dobra.

Mała dygresja: Kiedyś napisałem program, którego zadaniem była pomoc przy edycji plików. Jedną z funkcji tego programu było wyszukiwanie ciągu znaków (każdy znak zapisany był jako określony bajt). Z ciekawości wprowadziłem wyszukiwanie liniowe, które polegało na skonstruowaniu dwóch pętli: 1. szukanie pierwszej litery w tekście, 2. sprawdzanie kolejnych liter ze wzorca. Jak łatwo się domyśleć zajmowało to masę czasu. Dlatego też wprowadziłem swoje własne rozwiązanie: 1. szukanie pierwszej i ostatniej litery ze wzorca, 2. określenie liczby znaków pomiędzy kolejnymi znalezionymi miejscami, 3. sprawdzenie tylko tych fragmentów, w których ilość znaków była odpowiednia. Rozwiązanie okazało się na tyle dobre, że dla 32 milionów znaków znajdowało wszystkie dopasowania w ciągu niecałej sekundy.

Podsumowanie

Nie będę zbytnio odkrywczy pisząc, że z dwojga systemów Smarty jest tym lepszym. Wymaga co prawda poświęcenia czasu na opanowanie składni, ale potem nakład pracy zwróci się z dużym nakładem. Dzięki możliwości tworzenia własnych wtyczek oraz definiowania własnych modyfikatorów (nazwa funkcji zapisana jako |nazwa) oraz bloków (np. {translate}{/translate}) Smarty daje spore pole do popisu. Do tego dochodzi całkiem nieźle pomyślane cache i już mamy bazę, dzięki której możemy stworzyć coś większego, np. sklep internetowy, cms czy blog.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

*