Dziś jest piątek, 9 stycznia 2009 roku (z kalendarza...)

O wydajności OPT

Icon

15.10.2006, 17:25

Projekty

Komentarze (10)

Powrót

Przeglądając Internet w poszukiwaniu informacji o polskich systemach szablonów, nietrudno trafić na różne opinie dotyczące wydajności różnych bibliotek. Nietrudno też zauważyć pokutujące gdzieś w głębi świadomości przekonanie, że im większy łączny rozmiar katalogu lib/im więcej możliwości oferuje biblioteka, tym całość wolniej chodzi i przypina się jej łatkę "ogromniastej kobyły". Nie jest to do końca prawda; powiedziałbym nawet, że stwierdzeniu temu daleko do niej, jak Amerykanom do Tybetu. Czynników wpływających na wydajność pakietu są tysiące, a odpowiednio zorganizowany przepływ sterowania i umiejętne załączanie poszczególnych plików czyni ogromne cuda.

Kluczowe znaczenie w przypadku systemów szablonów mają tak naprawdę operacje dyskowe i to im powinniśmy się przyglądać w pierwszej kolejności. Każde załączenie nowego pliku, każdy "include" wymaga uruchomienia całej machiny przeszukiwania katalogów, ładowania danych do pamięci, blokowania dostępu, parsowania itd. - właśnie ten proces jest przede wszystkim rejestrowany w dobrze napisanych systemach, ponieważ przeważnie ilość kodu PHP biblioteki wykonywanego podczas wywołania display('template.tpl') jest znikoma.

Mierząc czas wykonywania, musimy pamiętać o sposobie działania narzędzia testującego. Opiszę to na przykładzie. Na własnym komputerze do porównywania wydajności OPT i Smarty'ego używam albo skryptu napisanego onegdaj przez Bastiona, na którym udowadniał swego czasu wyższość (pod względem wydajnościowym) swego Chameleona. Działał on na takiej zasadzie, iż ładował zainteresowane biblioteki, a następnie ileśtam razy pod rząd wywoływał w kółko tę samą funkcję, mierząc czas każdej iteracji z osobna. Można zatrzymać się w tym miejscu, mówiąc: "po #$%#$% mi więcej! Proszę, tu mam wyniki i wymiatam". Twierdzenie, iż taki test odzwierciedla wydajność systemu w świecie rzeczywistym to mit, gdyż wystarczy odrobinę pomyśleć, by dostrzec, iż odbywa się on w zupełnie innych warunkach! Symulowana jest tu sytuacja, kiedy w jednym żądaniu próbujemy wyświetlić 500 szablonów - oczywiście kod źródłowy biblioteki ładowany jest tylko jeden raz, a czas tego procesu nie jest nawet brany pod uwagę. Bardziej wiarygodne warunki oznaczają konieczność wysłania 500 osobnych żądań tak, aby każde z nich samodzielnie spróbowało wczytać kod źródłowy i odpalić 1-2 szablony, ponieważ właśnie tak odbywa się to naprawdę. Odpowiedni program do przeprowadzenia takiego benchmarku istnieje i nawet jest włączony do każdego wydania serwera Apache. Nazywa się ab, a znajdziemy go w katalogu "bin". Dopiero za jego pomocą dowiadujemy się, jak skrypt zachowa się w warunkach prawdziwego obciążenia.

Różnica między tymi dwoma podejściami jest widoczna gołym okiem. W pierwszej wersji OPT spokojnie bił Smarty'ego na głowę z ogromnym zapasem czasu. ab.exe pokazuje jednak, iż uwzględniając czas ładowania każdej z bibliotek, różnica ta znacząco się zaciera, a ubogi w opcje Chameleon był niewiele lepszy. Dodam tutaj, iż dwa lata temu, jeszcze przed rozpoczęciem prac nad OPT, za pomocą ab.exe mierzyłem sobie w sterylnych warunkach możliwości różnych systemów szablonów - o dziwo, Smarty rozłożył konkurencję w stylu fastTemplate czy phpLib na łopatki, ponieważ jako jedyny nie bawił się samodzielnie w maszynę wirtualną, tylko zwyczajnie prekompilował wszystkie szablony do poziomu tradycyjnego kodu PHP :).

Wobec tego niektórzy mogą posądzić mnie o kłamstwo, ponieważ twierdziłem, że OPT od Smarty'ego jest szybszy. I nadal tak twierdzę. Po pierwsze, warunki testu muszą być porównywalne: Smarty nie korzysta z wyjątków, więc z procedur testowych OPT musi zniknąć blok try{ ... }catch(). Smarty nie ma kompresji gZip, w OPT też jej nie włączamy; Smarty nie wysyła nagłówków, my również. Decydując się na opcję compile_check = false w Smarty'm, ustawiamy również analogiczną performance = true w OPT. Czy jest to oszustwo? Nie! Właśnie oszukiwanie było poprzednio - korzystając ze Smarty'ego, programiści i tak samodzielnie by musieli przynajmniej część z nich dodać, więc filozoficzne pytanie brzmi, dlaczego OPT ma mieć doliczony czas, ponieważ oferuje opcjonalną możliwość samodzielnego zajęcia się tym wszystkim automatycznie? Na takiej samej zasadzie ja mógłbym rzec, że skoro Smarty posiada znacznie szybszy kompilator, to może wystartować w teście z włączoną dyrektywą force_compile. Sensu w tym żadnego, dlatego przygotowując własne procedury, musimy dokładnie zastanowić się, jak je napisać, aby nie zafałszować wyników poprzez włączenie (lub nie) jakiejś opcjonalnej opcji jednemu z testowanych skryptów. Warunki muszą być jak najbardziej identyczne.

Bój OPT-Smarty każdy może we własnym zaciszu rozstrzygnąć na korzyść tego pierwszego, szczególnie jeśli wciąż siedzi w nim zakorzeniona ta przerośnięta kobyła :). W OPT znajduje się takie narzędzie, jak "OPT Configurator" pełniący rolę preprocesora. Jego zadanie polega na automatycznym usunięciu z biblioteki tych możliwości, z których nie korzystamy. Wyłączając w domu wszystko, co się dało, zmniejszyłem wielkość pliku opt.class.php do zaledwie 14 kB, przez co OPT dogonił Chameleona 1.5.0. Dodatkowo przestudiowałem kod źródłowy wygenerowanego pliku i dostrzegłem, iż wykonuje on niepotrzebnie każdorazowe załączanie dwóch plików; zakomentowanie tych linijek sprawia, że Chameleon zostaje w tyle.

Wpis ten powstał pod wpływem przetestowania rozwojowej gałęzi OPT programem ab.exe wykonanym właśnie po to, aby odnaleźć i wyłapać takie niuanse, dzięki czemu nadchodząca wersja 1.1.0 będzie jeszcze szybsza. Pragnąłem wykorzystać to jednocześnie do rozwiania paru mitów dotyczących wydajności systemów szablonów, opierając się na praktycznym doświadczeniu.

Tak przy okazji może mnie ktoś oświecić, co się z Chameleonem stało? Chciałem przetestować tę bibliotekę na jej najnowszej wersji, a tu spotkała mnie niespodzianka. Strona autora zawiera tylko nazwę domeny, serwer, na którym były pliki itd. informuje, iż domena jest na sprzedaż... dziwi mnie to tajemnicze zniknięcie, ponieważ tym projektem też się sporo osób interesowało.

Powrót

Komentarze

Napisał Ace w wtorek, 17 października 2006 o 22:37

Bastion czasem siedzi na irc.php.pl, zagadaj - spytaj sie. Musze powiedziec ze nigdy sie nie interesowalem opt... Bede musial kiedys zajezc do tego systemu :) Ale to moze po AComponents? :)

Napisał Bastion w wtorek, 17 października 2006 o 23:27

A to bardzo dziwne, bo testy Chameleona i innych były przeprowadzane wlaśnie za pomocą ab z parametrami -c 900 -n 300 - a testowany szablon nie był zwyklym sobie szablonem, tylko rzeczywistym testem przedstawiającym budowę szablonu ( header, treść, footer, newsy ) Poza tym nigdy nie twierdziłem ze Chameleon jest przeznaczony do dużych projektów do jakich doskonale nadaje się OPT czy Smarty, lecz do mniejszych - gdzie zaprzęganie OPTa mija się z celem. Na koniec skomentuję tak :

Typowe jak na Zyxa - nie do końca poinformowany - ale jak zwykle krzyczący :)

Pozdrawiam

Napisał jaco w wtorek, 17 października 2006 o 23:36

Duzo tego napisales a nic z tego nie wiadomo - moze bylbys laskaw udostepnic sposob w jaki testowales te szablony :) OPT to spory zestaw klas (ojej - trzeba je zaincludowac i wykonac operacje dyskowe :P) a Chameleon z tego co mi wiadomo generuje praktycznie w 100% "statyczny" kod php szablonu a zatem czas wykonywania jest rowny include + dzialania zdefiniowane przez kodera (warunki, petelki, echa itp. - na poziomie jezyka, zadnej abstrakcji)... Bron Boze nie chce tu porownywac funkcjonalnosci ale cos czego nie ma nie moze trwac (generowac sie) ;)

Napisał Paweł Halicki w środę, 18 października 2006 o 12:24

Swojego czasu brałem udział w dyskusji mającej na celu wyłonienie najodpowiedniejszego sposobu na przetestowanie systemu szablonów. Chętnie wziął bym udział w kolejnej takiej dyskusji. Odkąd nie ma już rozmów na #opb nie znalazłem żadnego ciekawego kanału traktującego poważnie o PHP. Co prawda spotkania odbywały się jeden raz w tygodniu, i być może w tym był klucz - zbierali się ludzie znający się na rzeczy.

Co do samego testu, to prawda jest taka że system szablonów musi leżeć deweloperowi, a różnice rzędu 0.01s nie powinny być przyczyną utrudniania sobie pracy.

Napisał Zyx w środę, 18 października 2006 o 13:39

Bastion: wyjaśnij mi, proszę, gdzie dopatrzyłeś się w moim poście (z dowodem!):
1. informacji o tym, że nie robiłeś żadnych innych testów za pomocą innych procedur?
2. informacji o możliwościach Chameleona i o tym, że ty cokolwiek o nich twierdziłeś? Gdzie dopatrzyłeś się porównania możliwości OPT i Chameleona?
3. w ogóle jakiejkolwiek krytyki Chameleona, z którą byłby sens polemizować?

Nie ma? I co, fajnie tak komentować czyjeś notatki bez czytania ich i na podstawie samodzielnie dorobionych słów najeżdżać na autora?

Jaco -> w OPT jest przecież identycznie :). Po skompilowaniu szablon jest zwykłym kodem PHP, który wystarczy zainclude'ować. Sama biblioteka jest także podzielona na kilka plików, ale założenie jest takie, aby ładować je w miarę potrzeb (np. opt.compiler.php nie jest ładowany, jeśli nie trzeba kompilować żadnego szablonu), choć w 1.0.2 nie jest z tym tak do końca OK, co ukazały mi opisywane testy. Procedurami testowymi były zwykłe przykłady z katalogu examples, tylko ujednolicone dla wszystkich trzech testowanych systemów.

Hwao -> a byłbyś zainteresowany powrotem tych rozmów? Nie widzę przeciwwskazań, by reaktywować takie cotygodniowe spotkania :).

Napisał Bastion w środę, 18 października 2006 o 19:38

Ad1) "Nazywa się ab, a znajdziemy go w katalogu "bin". Dopiero za jego pomocą dowiadujemy się, jak skrypt zachowa się w warunkach prawdziwego obciążenia." - Zasugerowałeś, że to prawidłowa metoda testowania - czyli, że Chameleon nie był tak testowany - a był .

Ad2) "Na własnym komputerze do porównywania wydajności OPT i Smarty'ego używam albo skryptu napisanego onegdaj przez Bastiona, na którym udowadniał swego czasu wyższość (pod względem wydajnościowym) swego Chameleona."

"Wyłączając w domu wszystko, co się dało, zmniejszyłem wielkość pliku opt.class.php do zaledwie 14 kB, przez co OPT dogonił Chameleona 1.5.0."

Porównania są - w dodatku z archaiczną wersją 1.5.0 . Porównanie nie właściwe oraz nie na czasie mające się nijak do obecnych możliwości gałęzi 2.x

Ad3) Polemizować z Tobą nie warto.

Napisał jaco w czwartek, 19 października 2006 o 15:38

| Hwao -> a byłbyś zainteresowany powrotem tych rozmów? Nie widzę przeciwwskazań,
| by reaktywować takie cotygodniowe spotkania :).

Ja chetnie wpadne sie powymadrzac ;p

Napisał Bastion w czwartek, 19 października 2006 o 15:39

A ja dostane pewnie perm bana :)

Napisał Sabistik w czwartek, 19 października 2006 o 23:41

Chodź nie jestem jakiś pro ;) to tez bym chętnie wpadł..

Napisał Zyx w piątek, 20 października 2006 o 15:09

Bastion -> jeśli NIE piszę nic o tym, że robiłeś/nie robiłeś dodatkowych testów, NIE znaczy to, że nie robiłeś, ani że robiłeś. Jeśli nie piszę w nawiasie "pod względem wydajnościowym, ale nie możliwościowym", to znaczy, że o możliwościach NIC nie ma. To nie jest poezja romantyczna, tylko tekst informacyjny i nie ma w nim żadnych dodatkowych podtekstów prócz tego, co piszę. Ad. Chameleona 1.5.0 -> proszę bardzo, ostatni akapit wyjaśnia dobitnie, dlaczego. O wiele lepiej byś zrobił, gdybyś przeczytał wpierw wpis i zwyczajnie udzielił mi odpowiedzi na to, aniżeli zaczynał od wycieczek osobistych opierając się na słowach, których nie napisałem.

Hwao & reszta -> ok, postaram się to reaktywować. Kiedy będą konkretne ustalenia, informacja pojawi się tutaj i na openpb.net.

Strona 1 z 1 :: 1

Skomentuj

NickInformacja
E-mailTylko do użytku wewnętrznego.
WWWNie zapomnij o http://
LayoutNapisz tu, czy widzisz dzienny czy nocny layout.
WpisFormatowanie wiki
Internauto, pamiętaj! Wolność to nie samowola - dbaj o kulturę wypowiedzi oraz dyskusji w sieci.

Na Zyxist.com panuje swoboda wyrażania opinii oraz krytyki pod dowolnym adresem. Jedyny warunek: musi być ona kulturalna i rzeczowa. Na chamstwo, prostactwo lub jawne obrażanie kogokolwiek nie ma tu miejsca i takie komentarze są bardzo szybko usuwane. Jeśli zamierzasz polemizować z treścią wpisu, wpierw uważnie ją przeczytaj.

© Tomasz "Zyx" Jędrzejewski 2005 - 2009 | Wykonanych zapytań: 2 | Serwer wirtualny zapewnia