Компания Facebook продолжает работу по повышению производительности кода PHP. В 2010 году они выпустили компилятор HipHop (HPHPc), который транслировал PHP в C++, жертвуя некоторыми редко используемыми функциями PHP вроде eval(), но повышая производительность.

С активной аудиторией в 1,1 млрд человек, Facebook крайне заинтересован в увеличении производительности веб-приложений. Поскольку многие программисты хорошо знакомы с PHP, компания решила не отказываться от этого «медленного» языка, а постараться максимально оптимизировать его. Кстати, так же делает и «Вконтакте» с недавно представленной технологией kPHP.

Впрочем, прежний подход по трансляции кода PHP в C++ пришлось оставить. Вместо этого выпущены виртуальная машина, окружение и JIT-компилятор для PHP под названием HipHop VM for PHP или просто HHVM. Здесь речь идёт о повышении производительности в пять-девять раз.

В мае серверы Facebook почти полностью перешли с HPHPc на HHVM. На Github выложен исходный код виртуальной машины и уже готовые собранные пакеты для Ubuntu 12.04, Debian 7 (wheezy) и Centos 6.4. Скоро обещают добавить пакет для FreeBSD 9.

По словам представителя Facebook, который недавно выступал на конференции O'Reilly Open Source Conference (OSCON), для стандартного веб-сайта, например, на хостинге Wordpress, повышение производительности будет небольшим: всего в пять раз. Другое дело, если речь идёт о большой кодовой базе PHP, именно для такой оптимизирована виртуальная машина HHVM, так что здесь возможен рост производительности в девять раз.

«Если вы возьмёте какой-то код PHP и запустите его на HipHop, то CPU не будет ограничивающим фактором производительности, — говорит Джоэл Побар (Joel Pobar), менеджер по разработке Facebook. — Скорее вы увидите, что система тратит больше времени на запросы к базе данных или общение с memcache».

HHVM работает по образцу JVM (Java Virtual Machine): JIT-компилятор транслирует исходный код в машинные коды, когда это нужно, и позволяет учитывать различные факторы при генерации машинного кода. Например, если там вызов к базе данных MySQL, то JIT-компилятор посмотрит, какой тип данных вызывается, и сгенерирует соответствующий код на лету.

http://habrahabr.ru/post/188056/

Вверх