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


Constructor: 0.000084

Method1: 0.037100 Method2: 0.000101 Total execution time: 0.037980

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

Классификация узких мест

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

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

Техника оптимизации

Рассмотрим теперь различные способы оптимизации времени выполнения сценария в зависимости от происхождения узкого места: • Оптимизация кода

Можно оптимизировать время выполнения интенсивных вычислений (плохо построенные циклы for() или while() или просто медленные ко­манды).

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

Этот прием полезен, если фактором замедления является сложность вы­вода в броузер, когда выводимое содержимое генерируется множеством функций.

Оптимизация базы данных

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

Кэширование

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

Оптимизация кода

Собственно код обычно не является причиной низкой производительности. Большинство трудностей оптимизации связано с базами данных или вво­дом/выводом данных.

Не пытайтесь оптимизировать код РНР, пока не выяснится, что его работу замедляет именно функция или ряд строк кода. В обычном сценарии РНР 10% времени выполнения тратится на выполнение кода и 90% - на ввод/ вывод и операции с базами данных.

Однако есть особые случаи, когда сценарий, выполняющий сложные вычис­ления, может замедлить работу сайта или приложения. Вот перечень реко­мендаций для оптимизации кода:

♦ Исследуйте циклы

♦ Используйте по возможности более быстрые функции

♦ Выберите лучший способ вывода данных

♦ Выберите лучший способ ввода данных

♦ Реже применяйте функцииесИо()

♦ Оптимизируйте код с помощью Zend Optimizer