Обещался я сделать сравнение разных средств для ускорения работы скриптов. Если кто будет говорить о неточности или неправильности метода тестирования – говорите как лучше, сделаем лучше.
Итак, основным камнем преткновения для проведения тестирования послужило использование Zend Framework. Он использует чрезмерно много загрузок разных файлов, что заметно снижает скорость работы.
Тестовый стенд – ноутбук Asus A6Tc, OS: Linux Ubuntu “Gutsy”, Lighttpd-1.4.17, PHP 5.2.3 через FastCGI.
Тестовое приложение основано на Zend Framework, использует подключение к БД (но не делает выборок), а для View использован Smarty.
Тестировал Pure PHP, Zend Optimizer 3.3.0, XCache 1.2.1, APC 3.0.14, eAccelerator 0.9.5.2.
Тестировал тривиально и просто – замерял время запуска и время окончания внутри скрипта, в конце вывода смарти эхал полученое время. И копипастил его (все действия для чистоты эксперимента проводились с другой машинки) в OO SpreadSheets.
Вот результаты (время в мс):
| Pure PHP | ZO | XCache | APC | eAccelerator |
|---|---|---|---|---|
| 247.8 | 272.92 | 573.43 | 397.9 | 156.2 |
| 251.04 | 271.81 | 106.81 | 89.75 | 74.16 |
| 245.14 | 286.8 | 108.96 | 88.38 | 110.42 |
| 252.72 | 267.1 | 91.01 | 89.2 | 534.97 |
| 207.39 | 221.43 | 65.54 | 47.49 | 69.55 |
| 209.5 | 221.34 | 65.89 | 53.31 | 71.01 |
| 217.66 | 232.13 | 70.04 | 47.66 | 70.32 |
| 202.88 | 222.59 | 66.1 | 48.04 | 70.26 |
| 203.17 | 220.79 | 69.94 | 54.19 | 70.76 |
| 204.03 | 235.28 | 65.76 | 48.49 | 70.05 |
И вот по этому добру график:

С XCache был замечен баг: если дважды быстро обновить страницу то контент вылазил полтора-два-три раза. Но я думаю это из-за перегенерации шаблона в Smarty. Однако неприятный осадок остался.
Жду комментариев =)
А нижняя ось – это номер запуска скрипта?
Denis Soloshenko
September 15th, 2007
Угу. Пускал 10 раз, замеры копипастил. Брявзер и куда копипастил – на другой машинке чтоб не создавать нагрузку в тесте.
dm
September 15th, 2007
Есть конечно очень большой шанс, что работать это все может еще быстрее, если я правильно разрулю генерацию темплейтов в смарти.
dm
September 15th, 2007
тоесть замерял ты время средствами РНР?
bsn
September 17th, 2007
угумс. Если подскажешь как лучше – попробую.
dm
September 17th, 2007
Зачем? – это добавляет в только ещё одну стохастическую составляющую. Причем скорее всего доминирующую.
В итоге этот тест скорее показывает скорость подключения к БД и скорость работы Smarty.
Учитывая мизерное количество эксперементов делать какие-либо выводы нельзя.
Для “чистоты эксперемента” выбрось нафик БД и кеширующий смарти.
Дальше гоняй ApacheBench-ем и проверяй производительность количеством RpS.
Vadim Voituk
September 17th, 2007
Ок, попробую. В скором времени ждите
dm
September 17th, 2007
профайлером надо мерять, а не самим РНР
bsn
September 19th, 2007
Используй нагрузочное тестирование. в несколько потоков, с прогревом и без. Рекомендую все же Jmeter – можно написать assertion для выявления ошибок (дупликация контента и т.п.) Очень может быть, что описаный глюк XCache тут вылезет еще…
schleicher
September 19th, 2007
>bsn
Хотелось бы померять, но вот есть мысль, что далеко не все будут совместимы с тестируемыми кешерами.
>schleicher
Хм. Можно попробовать.
dm
September 19th, 2007
Правильно спавнивать не Zend Optimizer vs XCache 1.2.1 or APC 3.0.14, а ZO + XCache vs ZO + APC vs Zend GUARD
KAndy
October 3rd, 2007