Принимая решение об оптимизации программы, сначала рассмотрите возможность модернизации своего компьютерного парка, - это может оказаться самой дешевой альтернативой. В 1965 году Гордон Мур (Gordon Moore) пришел к выводу, что мощность компьютеров каждые 18 месяцев удваивается. Эта зависимость так и называется - Закон Мура. И при постепенном увеличении мощности стоимость последней уменьшается. Например, несмотря на то, что тактовая частота процессоров удваивается, их стоимость остается относительно стабильной. Простая модернизация сервера, возможно, будет стоить меньше, чем оплата труда программистов, привлеченных к работе по оптимизации кода.
После модернизации аппаратной части следующим этапом является модернизация программного обеспечения, поддерживающего работу разрабатываемой программы. Начнем с операционной системы. ОС Linux и BSD Unix имеют репутацию операционных систем, которые могут "выжать" больше производительности из более старого оборудования и по производительности превосходят обычные коммерческие операционные системы, особенно если на передний план выходит такой фактор, как нестабильность работы сервера.
Если программа использует базу данных, можно рассмотреть различие между ре­ляционными базами данных. Например, СУБД MySQL имеет существенные преимущества в рабочих характеристиках над другими базами данных. Рабочие характеристики определенных СУБД можно найти на соответствующих Web-узлах. Кроме того, посмотрите, как использует память сервер базы данных.
Надо сказать о двух программных продуктах компании Zend, которые способны повысить рабочие характеристики программ, написанных на языке PHP. Первым из них является Zend Optimizer, который оптимизирует PHP-код по мере его обработки. Он позволяет ускорить выполнение программ на 40-100% по сравнению с рабочими характеристиками программы без него. Как и сам PHP, Zend Optimizer поставляется бесплатно. Другой продукт - это Zend Cache. Благодаря хранению скомпилированного кода в памяти он позволяет еще больше повысить производительность программного кода. Некоторые пользователи смогли добиться 300-процентного увеличения эффективности. Приобрести программный продукт Zend Cache можно на Web-узле компании Zend по адресу <http://www.zend.com/>.
28.2. Измерение производительности
Перед тем как приступить к оптимизации, необходимо измерить эффективность работы кода. Существуют два простых метода: вставка HTML-комментариев и использование утилиты ApacheBench Web-сервера Apache. PHP-приложения работают на Web-сервере, но при выполнении измерений должны учитываться задержки, добавляемые обработкой HTML-документов по сети.
Необходимо исключить обработку сервером любых других запросов. Для этого может потребоваться блокировка других пользователей или даже отключение их от сети. Тестирование сервера, который обеспечивает работу общедоступного Web-узла, может дать неоднозначные результаты, так как трафик зависит от времени суток. Тесты необходимо проводить на выделенном сервере, даже если "железо" не совсем соответствует рабочему серверу. Оптимизация, выполненная на более медленной аппаратной части, приведет к существенному выигрышу при запуске на рабочем сервере.
Простейшим методом является вставка HTML-комментариев в вывод сценария. Этот метод "утяжеляет" страницу и предполагает вставку данных, выводимых функцией microtime. Вставьте в начало и в конец сценария, а также в некоторых ключевых строках строки наподобие print("<!--" . microtime() . "-->n"). Для того чтобы измерить производительность, запросите страницу с помощью браузера и просмотрите полученный результат (рис. 28.1).
Эффективность и отладка
Функция microtime возвращает время в секундах. Первое число - это доли секунд, а второе - время в секундах, прошедшее с 1 января 1970 года. Можно сложить два этих числа и сохранить их в массиве, но лучше минимизировать воздействие таких побочных вычислений и производить соответствующие вычисления вручную. В примере, приведенном выше, выполнение первой части сценария занимает примерно 0,14 секунды, а второй - 0,39 секунды.