Wydajność Zend Framework - cz. 2

by Mateusz Tymek — on Zend Framework, PHP

Head's up! This post was written back in 2010 and is very likely to contain outdated information.

Niestety piszę ten artykuł dużo później niż chciałem. Przyczyną jest dosyć spory projekt nad którym pracowałem przez ostatnie dwa miesiące. Zlecenie było bardzo ciekawe, więc mam nadzieję że będę mógł wkrótce coś o nim napisać.
W tym czasie na pewnym blogu znalazłem rozwiązanie które wcześniej chciałem przedstawić (http://www.karolnowicki.pl/zend-framework/artykul/pokaz/zend-wolny-jak-zolw---niekoniecznie_-cz-1/). Ponieważ kolega mnie wyprzedził, nie widzę sensu powtarzać tutaj tego samego.
Zgadzam się z tym, że "powolność" Zenda jest spowodowana w dużej mierze ogromną liczbą plików które trzeba dołączyć przy każdym odświeżeniu strony. Liczba ta rośnie bardzo szybko z każdym kolejnym komponentem ZF którego użyjemy. Można to łatwo sprawdzić dodając na końcu pliku index.php polecenie typu echo count(get_included_files()). Oto kilka przykładów:

Pusta aplikacja utworzona poleceniem zf create project:
Użyta pamięć: 3328 kB
Dołączone pliki: 60


Dodajemy layout - (polecenie zf enable layout):
Użyta pamięć: 3584 kB
Dołączone pliki: 71


Teraz to samo z plus prosty formularz (składający się z jednego pola tekstowego i przycisku "wyślij"):
Użyta pamięć: 5376 kB
Dołączone pliki: 100


Wzrost jest bardzo wyraźny. Podam jeszcze wartości dla strony głównej mojego bloga:
Użyta pamięć: 17408 kB
Dołączone pliki: 268


Ogromne zużycie pamięci to głównie zasługa Doctrine, na szczęście można je zmniejszyć przy pomocy dowolnego akceleratora (APC, eaccelerator). Redukcja liczby plików jest możliwa np. dzięki metodzie zaprezentowanej w w/w artykule. Przedstawiony tam sposób jest ciekawy (mój był nieco bardziej prymitywny), jednak trzeba uważać i dobrze przetestować tak przygotowaną aplikację - mogą pojawić się dziwne błędy. Przykładowa klasa która lubi sprawiać problemy to Zend_Locale_Data - odwołuje się do plików po względnej ścieżce, a więc najprościej jest usunąć ją z merge'a.

To na razie tyle w temacie szybkości ZF.

PS. W ciągu tych dwóch miesięcy ze względu na brak czasu nie odpisałem też na kilka maili. Proszę, nie miejcie mi tego za złe i piszcie jeszcze raz :-)


comments powered by Disqus