В первом посте про XHProf: XHProf – профайлер PHP от Facebook, рассказывалось, что это за инструмент, как его установить, настроить и использовать. Решил провести небольшой тест производительности популярных фреймворков, используя данные XHProf.
Цель теста — посмотреть, какие данные получим по таким показателям, как:
- Wall Time (a.k.a. Elapsed time or wall clock time)
- CPU (CPU time in user space + CPU time in kernel space)
- MemUse (Memory usage)
- PeakMemUse (Peak memory usage)
- Number of Function Calls
Какие фреймворки протестировали?
- Yii 1.0.11
- Yii 1.1.rc
- Yiilite 1.0.11 / 1.1.rc (Bootstrap файл, где собраны вместе часто используемые классы. Плюс все комментарии и выражения трассировки вырезаются)
- Symfony 1.2.11
- Symfony 1.4.2
- Zend Framework 1.9.6
- DooPHP 1.2
- Codeigniter 1.7.2
- Kohana 2.3.4
- Kohana 3.0.3
- Cakephp 1.2.5 (тормозил больше всех, видно в 1.3.0 починили)
- Cakephp 1.3.0 alpha
- Recess 0.20 (был взят ради спортивного интереса, т.к. позиционирует себя как: Easy, Reliable, Fast, Extensible)
Почему именно эти PHP фреймворки? Эти проекты интересные, популярные и все ещё развиваются.
Как проводилось тестирование?
Для получения результатов выполнялось около 10 выборок по каждому фреймворку. И в качестве данных использовались
лучшие результаты с наименьшими задержками времени.
Условия тестирования
- Операционная система: FreeBSD 8.0
- Web сервер: Apache httpd 2.2.13
- PHP 5.2.11 + APC + XHProf + много других модулей
- CPU: VIA C7 1500MHz
- Оперативная память: 1GB
- Винчестер: 250 GB 5400 RPM 8MB SATA
Режимы тестирования
- Выключенный APC
- С включенным APC (apc.stat = 1)
- С включенным APC (apc.stat = 0)
«apc.stat = 1» — штатный режим APC, проверяется дата модификации файла, и если она изменилась, то кеш для файлов обновляется. В случае, если «apc.stat = 0», то проверка не проводится, что положительно влияет на производительность. НО в этом случае, пока не сбросите кеш вручную, данные не обновятся.
Тестируемые приложения
Для каждого фреймворка было написано свое приложение. Каждое приложение выводит строку «Hello world!». Все настройки фреймворков использовались по умолчанию. За основу была взята идея phpmark.
Результат #1. APC выключен
Yiilite не рекомендуется использовать без кеширования байткода (APC, XCache, eAccelerator), что собственно и видно по результатам теста.
Результат #2. APC включен (apc.stat = 1)
А тут наоборот, Yiilite отрабатывает быстрее, но потребляет больше памяти.
Результат #3. APC включен (apc.stat = 0)
Очень интересные цифры получаются. Например, Wall Time (ms) у Zend Framework 1.9.6 уменьшилось практически на 50%, для других на 5-30 мс. Но режим этот не всем подойдет, и к тому же тут свои нюансы, связанные с очищением кеша.
Сравниваем результаты «Wall Time (ms)» для всех режимов
Как можно убедиться, использование APC очень положительно сказывается на производительсности, время загрузки страницы увеличивается в разы для некоторых фреймворков.
Сравниваем результаты «MemUse (kb)» для всех режимов
Тут видно положительный эффект от использование APC — потребления памяти уменьшается в раза 2-3.
Update — Yii with View
Для Yii было заменено приложение, чтобы задействовать View. Все графики обновлены. Если сравнивать с предыдущими значениями Yii, то новые увеличились на 5-10 мс.
Выводы
Вот так с помощью XHProf стало видно, кто у нас тяжеловес из PHP фреймворков :). О чем это свидетельствует? Да ровным счетом ничего — это всего лишь «Hello World!» да и железка слабовата… :). Если взять реальный сайт с БД, его сложной бизнес логикой, то цифры будут совсем другие.
Я в своей работе использую Symfony 1.2.11. Да, он тяжеловат, но его плюсы перекрывают все его минусы, по моему мнению. К тому же, если взять нормальный сервачок (Opteron X2 2.2 GHz, 8 GB + хорошие веники) вместо VIA C7 1500MHz, то тот же самый «Hello World!» вместо 177 мс загрузится на Opteron за 23 мс, а реальный сайт — 146 мс. Вот так! Но это уже другая история.
А вот Yii Framework нахожу очень интересным и серьезным проектом. Осталось его испытать в боевых условиях.
Декабрь 17th, 2009 at 23:58
Хотелось бы увидеть реальное сравнение двух фреймов — Yii Framework и Symfony. Сравнение по возможностям, по скорости работы в реальных условиях… Так что б как в реальной битве
Декабрь 18th, 2009 at 07:36
Вот удивляюсь людям не ужели некуда больше время потратить как оценивать за сколько какой фреймворк скажет «Hello world!», скрупулезно записывать цифры, сводить в таблички, строить диаграммы, посты писать?!!!?!! Самый быстрый вариант на php: и точка!!! В следующий раз когда вы будете выбирать очередной скоростной фреймворк для «Hello World!» остановитесь на чистом php.
Если сравнивать нужно сравнивать более менее реальное приложение портированное на все фреймворки. В выводах вы так и написали, это осознание пришло после тестов? 😉
Декабрь 18th, 2009 at 10:50
2seroy: весь сыр-бор проводился ради интереса. Узнал про XHProf, попробывал на реальном проекте, и стало интересно — а какие цифры получим у других фреймворков… А выводы каждый сам сделает для себя :).
Декабрь 18th, 2009 at 08:43
Сравнивая фреймворки не стоит забывать и о их возможностях, чем меньше/быстрее фреймворк, тем он более топорный, и разработка на таком ФВ занимает больше времени и сил.
Декабрь 19th, 2009 at 00:15
Полностью поддерживаю
Декабрь 18th, 2009 at 09:20
Надеюсь, что Вы не брали из phpmark предлагаемые проекты для тестирования, как минимум тестирование Yii там не честное, они Hello World выводят прямо в контролере http://code.google.com/p/phpmark/source/browse/trunk/yii-1.0.3/protected/controllers/SiteController.php, поэтому результаты без генерации View такие быстрые.
Декабрь 21st, 2009 at 12:28
Спасибо за дельное замечание! Все данные и графики обновил с генерацией View.
Декабрь 18th, 2009 at 10:04
Вы просто попробуйте Yii и поймите, что сравнивать с Symfony не надо. Это можно понять даже с первых моментов знакомства с Yii. Одна только Convention Over Configuration чего стоит (в Yii всего один файл конфигурации, причем .php, против семейства YAML-иков у Symfony — ну можно и два-три, но это детали, которые лишь добавляют гибкости фреймворку, а он, поверьте мне очень и очень гибок).
Его система виджетов, расширений, ассеты! Это просто офигенное поле для различного рода экспериментов, разработок. При использовании Yii тебя прямо-таки направляет писать DRY OOP код на PHP.
Лично я Yii использую уже почти год (с февраля 2009), с Symfony познакомился в октябре и продолжаю с ней работать (текущий проект, куда я пришел написан на ней), и голос отдаю за Yii.
Причем я вполне адекватен в своих суждениях, т.к. до Yii работал с CodeIgniter’ом и Kohana’ой.
Декабрь 18th, 2009 at 11:03
А мне YAML нравится — удобно :), это дело вкуса. А если серьезно, то спасибо за информацию. Кстати я тоже работал на CodeIgniter, Kohana. А в YII есть нечто такое похожее на генерация админки? И как я понял ORM та тоже нет?
Декабрь 18th, 2009 at 13:41
ORM (реляционный AR) есть (не Doctrine, конечно). Генератор есть, но готовой админки как таковой нет.
Декабрь 18th, 2009 at 13:51
ORM конечно есть, посмотрите вот тут http://www.yiiframework.com/doc/guide/database.ar
по поводу админки http://www.yiiframework.com/doc/guide/quickstart.first-app
Декабрь 18th, 2009 at 22:03
Посмотрите еще на новый фреймворк http://code.google.com/p/phpdays/
Декабрь 20th, 2009 at 04:41
YII прикольный, но отсутствие в YII симфонийских приложений, сильно портит картину.
Далее.. Один файл для настроек возможно удобно, но в большом проекте это будет проблемой.
У меня схемы БД разложены в разные файлы по группам, и уже хочется что бы роуты в разных файлах можно было держать, т.к. их тоже уже очень много, и кол-во продолжает расти.
С общем кайф от Симфы ощутишь на большом проекте, тогда точно будешь рад что все четко разложено по папочкам.
З.Ы. угарный логотип у doophp.com