В этой статье представлены практические решения по оптимизации, буферизации и сжатию PHP.
Самым большим преимуществом PHP как популярного языка веб-программирования является скорость. В PHP4 это реализовано очень хорошо, и вряд ли можно найти более быстрый язык сценариев, чем он. Но если нагрузка вашего приложения велика, пропускная способность относительно мала или имеются другие узкие места, влияющие на производительность вашего сервера, вы можете попробовать некоторые из рецептов, которые я вам прописал, чтобы проверить, работают ли они.
1. Оптимизация кода
Когда дело доходит до оптимизации кода, вы можете думать об аккуратном и понятном коде, но это не является целью данной статьи, потому что если вы хотите добиться скорости, вы должны внести соответствующие изменения в исходный код PHP. Вообще говоря, лишние комментарии удаляются, чтобы сделать код нечитабельным. Но для программиста с хорошими качествами это просто невероятно. К счастью, компания Zend Technologies выпустила механизм оптимизации Zend, который поможет вам в этом. Сейчас это бесплатно, но вы должны следовать лицензии Zend Optimizer. Этот продукт может оптимизировать промежуточный код, генерируемый движком.
Установить этот движок относительно просто. После загрузки версии, соответствующей платформе, разархивируйте сжатый файл, затем добавьте следующие две строки в файл php.ini, перезапустите веб-сервер, и все готово.
zend_optimizer.optimization_level=15
zend_extension="/path/to/ZendOptimizer.so"
zend_loader.enable=Выкл.
Если это платформа Win32, должно быть:
zend_optimizer.optimization_level=15
zend_extension_ts="C:путь к endOptimizer.dll"
zend_loader.enable=Выкл
.! Это не ошибка? Почему три строчки? На самом деле третья строка необязательна. Поскольку кажется, что отключение zend_loader может немного повысить скорость, стоит поместить эту третью строку в php.ini. Следует отметить, что обязательным условием для его отключения является то, что вы не используете программу шифрования Zend.
2. Буферизация.
Если мы хотим еще больше повысить скорость, нам необходимо рассмотреть возможность использования технологии буферизации. Существует несколько альтернативных решений, включая Zend Cache (бета-версия), APC и Afterburner Cache, а также jpCache.
Все вышеперечисленные модули являются буферными. Они хранят промежуточный код, сгенерированный первым запросом файла .php, в памяти веб-сервера, а затем возвращают «скомпилированную» версию для последующих запросов. Поскольку при этом сокращается число операций чтения и записи на диск, а также вся работа в памяти, этот процесс может значительно повысить производительность приложений.
Существует множество таких продуктов, так какой же выбрать?
Zend Cache — хороший коммерческий продукт. После первой загрузки этих больших страниц PHP вы, очевидно, почувствуете увеличение скорости, и сервер выделит больше ресурсов. К сожалению, этот продукт стоит денег, но в некоторых случаях на них не хочется экономить.
Afterburner Cache является продуктом Bware Technologies и в настоящее время находится в бета-версии. Кажется, это то же самое, что и Zend Cashe, но он не может достичь таких же хороших результатов, как Zend Cache, и не может работать с механизмом оптимизации Zend, но он бесплатен. , поэтому я использую этот модуль.
APC (Alternative PHP Cache) — еще один бесплатный модуль, выпущенный Community Connect, который, похоже, готов к использованию в производственных средах.
3. Сжатие веб-контента
Для все более перегруженных сетей экономия пропускной способности так же важна, как и экономия воды. Согласно стандартам IETF, большинство браузеров должны поддерживать контент, сжатый с помощью gzip. Это означает, что вы можете отправлять в браузер содержимое, сжатое с помощью gzip, и браузер прозрачно распакует данные.
mod_gzip — это бесплатный модуль Apache, запущенный компанией Remote Communications, который может сжимать статический веб-контент и отправлять его в браузер. Этот модуль подходит для большинства статических веб-страниц. Хотя
люди из компании Remotecommunication сказали, что этот модуль поддерживает весь динамический контент, генерируемый mod_php, mod_perl, mod и т. д., судя по списку рассылки mod_gzip, эта проблема не будет решена. до 1.3.14.6ф.
Если мы хотим сжать динамический контент, мы можем использовать class.gzip_encode.php, класс PHP, используемый в начале и конце скрипта. Для всего веб-сайта вызываются функции auto_prepend и auto_append php.ini. Подробности вы можете прочитать в программе этого класса. Эта программа хорошо прокомментирована и автор рассказывает вам практически все. Но перед его использованием ваш PHP должен быть скомпилирован для поддержки zlib.
В PHP 4.0.4 новым решением является использование ob_gzhandler, которое может достичь того же эффекта, что и приведенный выше класс. Просто добавьте в php.ini следующее предложение:
output_handler = ob_gzhandler;
Это позволит PHP активировать буферизацию вывода и сжимать весь вывод. Если есть какая-то особая причина, по которой вы не хотите, чтобы весь контент сжимался и выводился, вы можете добавить следующую строку в файл .htaccess, чтобы сжать файлы в соответствующем каталоге.
php_value output_handler ob_gzhandler
также можно добавить непосредственно в PHP-код:
ob_start("ob_gzhandler");
Эта технология сжатия очень эффективна, но для пользователей Netscape Communicator она выглядит неполной, поскольку не может сжимать графические файлы. В чем проблема? при сжатии файлов jpeg и gif в IE нет этой проблемы?
Вывод:
использование методов, обсуждаемых в этой статье, должно повысить производительность вашего веб-сайта, но имейте в виду, что:
- PHP не может быть причиной узкого места, дважды проверьте другие причины (например, базу данных)
- Вы не можете максимизировать состояние производительности сервера. Поэтому, прежде чем жаловаться на PHP и его буферизацию, подумайте, не пора ли обновить ваш сервер или внедрить технологию динамической балансировки нагрузки (это большие деньги).
- Не стоит недооценивать сжатие контента. Наблюдая за увеличением скорости работы ваших PHP-приложений в вашей интрасети размером 100 МБ, не забывайте, что пользователи вашего модема жалуются на ваши HTML-страницы размером 100 КБ.