Оптимизатор Zend
Последняя попытка оптимизации кода - воспользоваться свободно распространяемым оптимизатором компании Zend (http://www.zend.org/"> http://www.zend.org : Оптимизатор можно найти на
Это бесплатный подключаемый модуль для РНР, который анализирует код с целью возможных усовершенствований, например замены постинкременти- рования на прединкрементирование и других действий, основываясь на представлениях ядра Zend об оптимальности кода.
В обычных управляемых вводом/выводом сценариях оптимизатор Zend Optimizer не повышает производительность, но при наличии в сценарии большого объема вычислений улучшение может быть значительным.
Буферизация вывода и сжатие данных
Большинство механизмов генерирования страниц интенсивно используют функции вывода для передачи в броузер динамического содержимого. В таких сценариях масса команд с переменными, и скорость выполнения может заметно упасть из-за интенсивного вывода данных. Поэтому при частом генерировании динамического содержимого выполнение сценария может замедлиться.
Буферизация вывода позволяет сократить время ввода/вывода для сценария. Это стандартная технология для программ с интенсивным вводом/выводом, которую легко применить к сценариям РНР с помощью функций буферизации, появившихся в РНР начиная с версии
Идея буферизации заключается в том, чтобы записывать все содержимое, подлежащее выводу, в буфер памяти и выводить потом целиком этот буфер. Этим достигаются следующие преимущества:
♦ Количество операций ввода/вывода сводится к одной, что дает значительное увеличение производительности
♦ Содержимое можно обрабатывать и анализировать, прежде чем отправить броузеру
♦ Операция вывода может быть осуществлена последовательно и быстро
Недостаток этого приема в том, что клиенту приходится ждать конца работы сценария. Поэтому, в зависимости от архитектуры приложения и времени выполнения сценария, пользователь может прийти к выводу о том, что система зависла, закрыть броузер или сделать что-либо другое нежелательное.
Пример буферизации вывода
Вот очень простой пример, демонстрирующий легкость буферизации вывода в РНР:
<?ptip
ob_start();
echo("This is a test\n"); echo("More content\n");
ob_end_flush();
Функция ob_start() включает буферизацию вывода. После вызова ob_start () все функции, которые выводят данные в броузер, будут направлять их в буфер данных.
Буфер выводится в броузер с помощью функции ob_end_flush(), которая выполняет две задачи - закрывает выходной буфер, а затем выводит содержимое последнего в броузер.