Программист Дмитрий Стогов из Zend Technologies давно занимается улучшением производительности PHP. За последние годы его компании удалось добиться немалого успеха на этом поприще. Особенно впечатляющими были результаты для кода PHP 5.0. Однако, на версии PHP 5.5 такого результата показать не удалось, так что разработчики сконцентрировались на смежных направлениях, начали экспериментировать с менеджерами памяти, технологиями JIT и т.д.

«Я потратил много времени, экспериментируя с JIT, — пишет Дмитрий Стогов, — и даже создал образец JIT-компилятора на базе LLVM, встроенного в OPCache. Результаты на bench.php были отличными — 0,219 с вместо 2,175, то есть десятикратное ускорение, — но на реальных приложениях мы получили улучшение только в несколько процентов». После этого разработчики начали анализировать, в чём истинная причина низкой производительности PHP-приложений, где то «бутылочное горлышко», из-за которого ухудшается общий результат.

В типичном PHP-приложении примерно 20% времени уходит на CPU в менеджере памяти, 10% — на операции с хэш-таблицами, 30% — на внутренние функции и 30% — на виртуальную машину. В общем, простого метода оптимизации не просматривается, поэтому в Zend затеяли большой рефакторинг кода PHP-движка в надежде, что это повысит производительность.

После четырех месяцев работы получен хороший результат. Обновленный движок PHPNG увеличивает производительность реальных веб-приложений на 10-30%. Например, на тестовом сервере WordPress 3.6 показал прибавку 20,0% (253 против 211 запросов/с), Drupal 6.1 – 11,7% (1770 против 1585 запросов/с), Qdig – 15,3% (555 против 482 запросов/с), тестовое приложение ZF – 30,5% (217 против 166 запросов/с).



Оставить мнение