Скомпилированный PHP?

Есть ли у кого-нибудь опыт работы с ускорителями PHP, такими как MMCache или Zend Accelerator ? Я хотел бы знать, делает ли использование любого из них PHP сопоставимым с более быстрыми веб-технологиями. Кроме того, есть ли компромиссы при их использовании?

Ответов (10)

Решение

Обратите внимание, что Zend Optimizer и MMCache (или аналогичные приложения) - это совершенно разные вещи. Пока Zend Optimizer пытается оптимизировать код операции программы, MMCache кэширует сценарии в памяти и повторно использует предварительно скомпилированный код.

Я сделал несколько тестов , некоторое время назад , и вы можете найти результаты в своем блоге (на немецком языке, хотя). Основные результаты:

Сам по себе Zend Optimizer совсем не помог. На самом деле мои скрипты были медленнее, чем без оптимизатора.

Что касается кешей : * самый быстрый: eAccelerator * XCache * APC

И: вы НЕОБХОДИМО установить кэш опкодов!

Например: альтернативный текст http://blogs.interdose.com/dominik/wp-content/uploads/2008/04/opcode_wordpress.png

Это время, которое потребовалось, чтобы вызвать домашнюю страницу wordpress 10 000 раз.

Изменить: Кстати, eAccelerator содержит сам оптимизатор.

Тестирование BlaM включало все вызовы БД, сделанные WordPress. Когда вы делаете меньше вызовов БД, вы увидите, что прирост производительности кешей опкодов будет еще более значительным.

В зависимости от того, какая часть вашего PHP-кода действительно выполняется и сколько времени занимает это выполнение, они могут быть действительно большим выигрышем. Это, конечно, не повредит, но результат, который вы увидите, будет во многом зависеть от того, где вы сейчас проводите время.

btw mmcache теперь перенесен в другой проект, я забыл название, но Google скажет вам.

Оба интересны и обеспечат повышение скорости, поскольку они компилируют исходный код в двоичное представление, которое затем выполняется движком PHP.

Любой огромный веб-сайт, работающий с PHP (например, Facebook), использует какую-то систему кеширования кодов операций, такую ​​как MMCache.

Проблема в том, что их не так просто настроить в зависимости от вашей системы.

MMCache устарел. Я рекомендую http://pecl.php.net/package/APC или http://xcache.lighttpd.net/ , оба из которых также предоставляют вам хранилище переменных (например, Memcache).

Вы проверили Фалангер? Он компилирует PHP в код .NET. Вот несколько тестов, которые показывают, что это может значительно улучшить производительность.

Я использовал Zend Accelerator немного раньше (2004-й). Это, безусловно, дало значительный выигрыш в производительности кода, с которым он мог работать, но, к сожалению, система, которую я использовал, была спроектирована так, чтобы довольно часто динамически загружать код, а затем оценивать его, с чем Zend Accelerator в то время мало что мог поделать (и я ' Я догадываюсь, все равно не могу).

С другой стороны, мы, безусловно, заметили некоторые проблемы с кешированием (где код будет меняться, но скомпилированная версия синхронизируется с изменением по той или иной причине). Я полагаю, что к настоящему времени эти проблемы, вероятно, уже решены.

В любом случае, у меня нет точных сравнительных цифр, и, конечно же, я не писал одну и ту же систему в разных средах для сравнения, но для подавляющего большинства систем PHP не собирается убивать вас с точки зрения производительности.

Я использую APC на своих производственных серверах, и он отлично работает прямо из коробки. Скомпилируйте его и добавьте в PHP, и вам не нужно будет ничего настраивать. Я проверяю его время от времени, просто чтобы просмотреть статистику, но поскольку я использую MVC, все основные файлы (маршрутизаторы, контроллеры и т. Д.) Редко меняются изо дня в день, поэтому код остается скомпилированным и работает довольно эффективно. .

в настоящее время мы используем apc, бесплатно, и это было просто plug and play на наших живых серверах. Обеспечил огромный прирост производительности нашего сайта, особенно по мере увеличения размера проекта. У меня также отключен apc.stat, поэтому он не проверяет, был ли обновлен код, поэтому всякий раз, когда нам нужно обновить код на действующем сайте, мы перезапускаем apache.

Я использую APC и могу засвидетельствовать, что он может значительно снизить нагрузку на ЦП и ввод-вывод на сервере приложений, если вы поддерживаете высокую частоту попаданий в кеш. Это не только избавит вас от необходимости компилировать, но и избавит вас от необходимости вообще читать php-файлы с диска. (т.е. байт-коды обслуживаются непосредственно из основной памяти, поэтому это очень быстро). Это снижает скорость визуализации одной страницы и увеличивает количество запросов в секунду, которые может обработать ваш сервер.

Если вы используете RedHat или CentOS, установить APC очень просто:

yum install php-devel httpd-devel php-pear
pecl install apc 
echo "extension=apc.so" > /etc/php.d/apc.ini
# if you're using SELinux:
chcon "system_u:object_r:textrel_shlib_t" /usr/lib/php/modules/apc.so
/etc/init.d/httpd restart

Вы спросили о минусах. Единственным недостатком является то, что для этого требуется немного памяти. По умолчанию APC составляет 30 МБ, но его можно отрегулировать, и стоимость небольшого количества памяти более чем окупается за счет увеличения скорости и скорости отклика.