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

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

10 ответов

Решение

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

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

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

Когда дело доходит до кэшей: * Самый быстрый: http://eaccelerator.net/ * XCache * APC

И: Вы действительно хотите установить кэш кода операции!

Например: http://blogs.interdose.com/dominik/wp-content/uploads/2008/04/opcode_wordpress.png

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

Редактировать: Кстати, eAccelerator содержит сам оптимизатор.

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

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

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

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

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

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

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

Я использую 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 МБ, но его можно отрегулировать, а стоимость чуть-чуть памяти больше, чем окупается при повышенной скорости и скорости отклика.

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

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

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

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

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

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

Другие вопросы по тегам