В этой статье будет продолжена тема ускорения работы web-сайта. На этот раз мы познакомимся с различными акселераторами, которые кешируют бинарный код динамических страниц.

Каждый раз при обращении к какой-либо php-странице, интерпретатор читает все подключаемые файлы и переводит их в двоичный код, при повторном запросе скрипта операция повторяется. Акселераторы кешируют двоичный код, который был получен после первого обращения к странице. Такой трюк может давать десятикратный прирост производительности.

Одним из таких акселераторов является eAccelerator. Он работает с PHP в режиме fastcgi или mod_php. Давайте рассмотрим установку этого пакета. Исходный код eAccelerator находится на официальном сайте. Там можно выбрать какую из версий использовать.

Проверьте все ли зависимости данного пакета у вас имеются.

apache >= 1.3, mod_php >= 4.1, autoconf, automake, libtool, m4

Для сборки пакета так же необходим php-devel.

Далее необходимо собрать библиотеку so. Для этого, после распаковки загруженного архива перейдем в директорию с исходным кодом.

cd /home/izumeroot/tmp/eaccelerator-0.9.5.3/

Присваиваем переменной путь к директории, в которой у нас находятся приложения.

export PHP_PREFIX="/usr"

В вашем дистрибутиве это может быть к примеру /usr/locale.
Далее запускаем phpize. Этот файл входит в состав php-devel. Путь может отличаться в вашем дистрибутиве. Узнать местоположение phpize можно при помощи whereis phpize.

$PHP_PREFIX/bin/phpize

После выполнения отобразится примерно следующее.

Configuring for:
PHP Api Version:         20041225
Zend Module Api No:      20060613
Zend Extension Api No:   220060519

Далее конфигурируем исходники перед сборкой.

./configure \
  --enable-eaccelerator=shared \
  --with-php-config=$PHP_PREFIX/bin/php-config

И компилируем командой make. После завершения компиляции можно выполнить make install. Но я просто скопировал полученный so-файл в директорию с расширениями php.

cp ./modules/eaccelerator.so /usr/lib/php5/extensions/

Теперь необходимо в конфигурацию php добавить данное расширение. Если у вас есть директория для ini-файлов расширений, то вы можете просто скопировать готовый ini-файл:

cp ./eaccelerator.ini /etc/php5/conf.d/

и указать в нем только путь к so-библиотеке

; You must uncomment one (and only one) line from the following to load
; eAccelerator extension.
extension="eaccelerator.so"
;zend_extension="/usr/lib/php4/eaccelerator.so"
;zend_extension_ts="/usr/lib/php4/eaccelerator.so"

Обратите внимание, что я указал относительный путь extension=”eaccelerator.so” (строки ниже этой закомментированы). Это возможно благодаря тому, что в php.ini есть строка extension_dir = /usr/lib/php5/extensions. Если такой строки нет, то необходимо указывать абсолютный путь. Так же обратите внимание, что в eaccelerator.ini есть строка eaccelerator.cache_dir = “/tmp/eaccelerator”.
Если у вас нет директории для ini-файлов расширений php. То вам необходимо вносить строки из eaccelerator.ini непосредственно в php.ini. Но в этом случае надо помнить, что php.ini для php как модуля apache и php.ini как fast-cgi это чаще всего разные файлы. Поэтому вносите изменения в тот, что вы используете.
Теперь нам осталось создать папку для кеша и перезапустить apache.

mkdir /tmp/eaccelerator
chmod 0777 /tmp/eaccelerator
/etc/init.d/apache2 restart

Теперь, если вы обратитесь к тестовой страничке с вызовом phpini(), то в выдаче будет секция eAccelerator. В графе Cached Scripts вы там сможете видеть статистику кеширования.
Обратите внимание, что в ini-файле акселератора есть ряд параметров, которые можно изменять. Файл прекрасно комментирован. Там можно влючить или отключить оптимизацию, указать уровень сжатия, место хранения кеша и т.д.
В readme-файле указаны похожие проекты. И один из них, это APC. В принципе чтобы его установить есть сложный путь и простой. Сложный очень похож на установку выше рассмотренного пакета и описан в readme-файле. Рассмотрим простой.
Если php у вас находится по данному пути /usr/bin/php, то установка будет выглядеть так:

cd /home/izumeroot/tmp/APC-3.0.19
/usr/bin/phpize
./configure --enable-apc --enable-apc-mmap \
   --with-apxs --with-php-config=/usr/bin/php-config
make
cp ./modules/apc.so /usr/lib/php5/extensions/

И затем, когда so-библиотека находится в папке расширений, то в php.ini нам надо добавить следующее:

;APC Accelerator
extension="apc.so"

После перезагрузки apache в выдаче phpinfo() у вас так же появится секция APC. Стоить отметить, что APC может не только создавать двоичный кеш но и хранить в оперативной памяти некоторые структуры для более быстрого доступа к ним. Но этот аспект будет рассмотрен в других статьях.
Другим пакетом, который решает похожие задачи является Zend Optimizer. Только принцип немножко иной. Существует Zend Guard (ранее назывался Zend Encoder). Он позволяет закодировать скрипт в байт-код в том числе для защиты интеллектуальной собственности разработчика. А вот Zend Optimizer это серверный модуль который позволяет таким скриптам выполняться. При этом рост производительности обещает быть до 40%. Zend Optimizer можно использовать совместно с eAccelerator (или другим акселератором). В этом случае такой акселератор должен быть указан в php.ini ранее чем Zend Optimizer.

Существуют и другие акселераторы. Среди них наиболее известные, пожалуй, это The ionCube PHP Accelerator, xCache и Turck MMCache for PHP (TurckMMCache это проект, о которого ответвился eAccelerator). А каким акселератором пользуетесь вы?

Tags: ,

One Response to “Ускоряем PHP. eAccelerator и другие акселераторы”

  1.  Дмитрий Says:

    Можно и мой пример расмотреть, установка на FreeBSD из портов https://www.all-solutions.ru/freebsd/eaccelerator-ustanovka-i-nastrojka.html