Dec 17 2009

XHprof: производительность популярных PHP фреймворков

Category: PHP,Symfonyingvar @ 23:44

В первом посте про 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

Режимы тестирования

  1. Выключенный APC
  2. С включенным APC (apc.stat = 1)
  3. С включенным APC (apc.stat = 0)

«apc.stat = 1» — штатный режим APC, проверяется дата модификации файла, и если она изменилась, то кеш для файлов обновляется. В случае, если «apc.stat = 0», то проверка не проводится, что положительно влияет на производительность. НО в этом случае, пока не сбросите кеш вручную, данные не обновятся.

Тестируемые приложения

Для каждого фреймворка было написано свое приложение. Каждое приложение выводит строку «Hello world!». Все настройки фреймворков использовались по умолчанию. За основу была взята идея phpmark.

Результат #1. APC выключен

1_xhprof_without_apc

Yiilite не рекомендуется использовать без кеширования байткода (APC, XCache, eAccelerator), что собственно и видно по результатам теста.

Результат #2. APC включен (apc.stat = 1)

2_xhprof_with_apc

А тут наоборот, Yiilite отрабатывает быстрее, но потребляет больше памяти.

Результат #3. APC включен (apc.stat = 0)

3_xhprof_with_apc_stat_eq_0

Очень интересные цифры получаются. Например, Wall Time (ms) у Zend Framework 1.9.6 уменьшилось практически на 50%, для других на 5-30 мс. Но режим этот не всем подойдет, и к тому же тут свои нюансы, связанные с очищением кеша.

Сравниваем результаты «Wall Time (ms)» для всех режимов

4_xhprof_wall_time_comparison

5_xhprof_wall_time_comparison_graph_2

Как можно убедиться, использование APC очень положительно сказывается на производительсности, время загрузки страницы увеличивается в разы для некоторых фреймворков.

Сравниваем результаты «MemUse (kb)» для всех режимов

6_xhprof_mem_use_comparison_graph

Тут видно положительный эффект от использование 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 нахожу очень интересным и серьезным проектом. Осталось его испытать в боевых условиях.

Ссылке по теме

Tags: , , ,

13 Responses to “XHprof: производительность популярных PHP фреймворков”

  1. Killer says:

    Хотелось бы увидеть реальное сравнение двух фреймов — Yii Framework и Symfony. Сравнение по возможностям, по скорости работы в реальных условиях… Так что б как в реальной битве :)

  2. seroy says:

    Вот удивляюсь людям не ужели некуда больше время потратить как оценивать за сколько какой фреймворк скажет «Hello world!», скрупулезно записывать цифры, сводить в таблички, строить диаграммы, посты писать?!!!?!! Самый быстрый вариант на php: и точка!!! В следующий раз когда вы будете выбирать очередной скоростной фреймворк для «Hello World!» остановитесь на чистом php.

    Если сравнивать нужно сравнивать более менее реальное приложение портированное на все фреймворки. В выводах вы так и написали, это осознание пришло после тестов? 😉

    • ingvar says:

      2seroy: весь сыр-бор проводился ради интереса. Узнал про XHProf, попробывал на реальном проекте, и стало интересно — а какие цифры получим у других фреймворков… А выводы каждый сам сделает для себя :).

  3. Anton Shevchuk says:

    Сравнивая фреймворки не стоит забывать и о их возможностях, чем меньше/быстрее фреймворк, тем он более топорный, и разработка на таком ФВ занимает больше времени и сил.

  4. apk says:

    Надеюсь, что Вы не брали из phpmark предлагаемые проекты для тестирования, как минимум тестирование Yii там не честное, они Hello World выводят прямо в контролере http://code.google.com/p/phpmark/source/browse/trunk/yii-1.0.3/protected/controllers/SiteController.php, поэтому результаты без генерации View такие быстрые.

  5. cr0t says:

    Вы просто попробуйте Yii и поймите, что сравнивать с Symfony не надо. Это можно понять даже с первых моментов знакомства с Yii. Одна только Convention Over Configuration чего стоит (в Yii всего один файл конфигурации, причем .php, против семейства YAML-иков у Symfony — ну можно и два-три, но это детали, которые лишь добавляют гибкости фреймворку, а он, поверьте мне очень и очень гибок).

    Его система виджетов, расширений, ассеты! Это просто офигенное поле для различного рода экспериментов, разработок. При использовании Yii тебя прямо-таки направляет писать DRY OOP код на PHP.

    Лично я Yii использую уже почти год (с февраля 2009), с Symfony познакомился в октябре и продолжаю с ней работать (текущий проект, куда я пришел написан на ней), и голос отдаю за Yii.

    Причем я вполне адекватен в своих суждениях, т.к. до Yii работал с CodeIgniter’ом и Kohana’ой.

  6. phpDays framework says:

    Посмотрите еще на новый фреймворк http://code.google.com/p/phpdays/

  7. 228vit says:

    YII прикольный, но отсутствие в YII симфонийских приложений, сильно портит картину.
    Далее.. Один файл для настроек возможно удобно, но в большом проекте это будет проблемой.
    У меня схемы БД разложены в разные файлы по группам, и уже хочется что бы роуты в разных файлах можно было держать, т.к. их тоже уже очень много, и кол-во продолжает расти.
    С общем кайф от Симфы ощутишь на большом проекте, тогда точно будешь рад что все четко разложено по папочкам.

    З.Ы. угарный логотип у doophp.com :)

Leave a Reply