Аргерих Л. О языке РНР. Часть 5. Страница 95


Оптимизатор Zend

Последняя попытка оптимизации кода - воспользоваться свободно распрост­раняемым оптимизатором компании Zend (http://www.zend.org/"> http://www.zend.org : Оптимиза­тор можно найти на

Это бесплатный подключаемый модуль для РНР, который анализирует код с целью возможных усовершенствований, например замены постинкременти- рования на прединкрементирование и других действий, основываясь на представлениях ядра Zend об оптимальности кода.

В обычных управляемых вводом/выводом сценариях оптимизатор Zend Op­timizer не повышает производительность, но при наличии в сценарии боль­шого объема вычислений улучшение может быть значительным.

Буферизация вывода и сжатие данных

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

Буферизация вывода позволяет сократить время ввода/вывода для сцена­рия. Это стандартная технология для программ с интенсивным вводом/вы­водом, которую легко применить к сценариям РНР с помощью функций бу­феризации, появившихся в РНР начиная с версии

Идея буферизации заключается в том, чтобы записывать все содержимое, подлежащее выводу, в буфер памяти и выводить потом целиком этот буфер. Этим достигаются следующие преимущества:

♦ Количество операций ввода/вывода сводится к одной, что дает значи­тельное увеличение производительности

♦ Содержимое можно обрабатывать и анализировать, прежде чем отпра­вить броузеру

♦ Операция вывода может быть осуществлена последовательно и быстро

Недостаток этого приема в том, что клиенту приходится ждать конца работы сценария. Поэтому, в зависимости от архитектуры приложения и времени выполнения сценария, пользователь может прийти к выводу о том, что сис­тема зависла, закрыть броузер или сделать что-либо другое нежелательное.

Пример буферизации вывода

Вот очень простой пример, демонстрирующий легкость буферизации вывода в РНР:

<?ptip

ob_start();

echo("This is a test\n"); echo("More content\n");

ob_end_flush();

Функция ob_start() включает буферизацию вывода. После вызова ob_start () все функции, которые выводят данные в броузер, будут направлять их в бу­фер данных.

Буфер выводится в броузер с помощью функции ob_end_flush(), которая вы­полняет две задачи - закрывает выходной буфер, а затем выводит содержи­мое последнего в броузер.