Оптимизация PHP скриптов

PHP Coding Standard

Оптимизация – это процесс модификации системы для улучшения её эффективности (wikipedia). Так давайте приступим к делу…

Нет, вначале прочитайте статью “Оптимизация программ на PHP”. Читайте-читайте, я подожду…

Я так понимаю вы прочитали и решили “оптимизировать” ваш текущий проект? Похвально, только перед тем как начать рефакторинг – посмотрите сколько времени и памяти кушает ваш проект, а теперь вперед – оптимизируем… После того как нелегкий труд будет закончен замерим результаты – поразительный прирост производительности – процентов 5-6% – удивлены? Давайте немного проанализируем советы приведенные в данной статье:

Выносите $переменные из “текстовых строк” – ускорение 25-40%
Посчитайте кол-во таких строк в вашем проекте, я думаю их кол-во будет стремиться к нулю, если вы используете какой-нить шаблонизатор (Smarty).

Короткие переменные не более 7 символов – ускорение 15%
Читабельность кода от этого не улучшится, я обычно называю переменную по имени объекта хранящегося в ней, а имена объектов частенько переваливают за десяток символов, особенно если следовать стандартам именования Zend.

Тормозят ли массивы в PHP? Вернее, как именно. Ускорение 40%
Процитирую “Доступ к элементу одномерного ассоциативного массива по имени, не заключенному в кавычки”, если вы сейчас будете так писать – то неприменно получите Notice. Notice‘ы тормозят приложение.

Выносите многомерные массивы из “текстовых строк” – ускорение 25-30%
Да и читабельность повыше будет.

Регулярные выражения: PHP(POSIX) vs Perl. Ускорение 60-200%
Много у вас в проекте таких? В любом случае – лучше избегать регулярок в узких местах.

Циклы: for, foreach, while, count/sizeof() – ускорение 15%-30%
Если нет необходимости в foreach используйте for.

Для чтения файла file() быстрее, чем fopen+цикл – ускорение 40%
У меня в последних проектах не так часто приходиться считывать файлы, а у Вас?

К чему я клоню? Статья хороша, стоит помнить о такой мелкой оптимизации, особенно в “узких” местах. Почему мелкой? Посмотрите на результаты такой оптимизации – менее 10% прироста скорости, ведь тесты производительности показаны относительные, а если перевести в секунды: count() выполняется 0.0002 сек., а sizeof 0.00018 – много мы выиграем? Так что же необходимо оптимизировать?…

Архитектура
Тут есть где разойтись, и начать писать весь проект заново ;) но лучше чуть-чуть напильником пошаманить – зачастую эффект будет поразительным. Для начала – не подключайте сразу все библиотеки используемые в проекте – всё только по требованию. Старайтесь разделить проект на составляющие – шаблоны проектирования еще никто не отменял.

Работа с БД
Очень много времени уходит на работу с БД, как сам факт обращения к ней, так и сама выборка из БД происходит не моментально. И что же делать? Необходимо убирать лишнее, где это возможно, а где нет – стараемся кэшировать. И уберите же обращение к БД в цикле!

Парсинг XML
У вас есть конфигурационный файл в XML формате и он каждый раз парсится? Ой как не хорошо – давайте-ка будем это дело кэшировать!

Вывод:
1. Потратьте на разработку архитектуры проекта чуть больше, чем пару часиков
2. Уберите лишние обращения к БД (если первый пункт займет у вас несколько дней – то и этот не появится)
3. Используйте кэширование данных получаемых из БД или XML
4. Используйте кэширование готовых HTML страничек
5. Установите какой-нить оптимизатор PHP (XCache или Zend Optimizer)

И еще – где-то упоминалось, что страничка не должна грузиться более двух секунд – значит PHP не должен тратить более одной секунды на её генерацию.

8 thoughts on “Оптимизация PHP скриптов”

  1. Ползеные замечания.

    И уберите же обращение к БД в цикле!

    Товарищ показывал код индусов – цикл, в котором из базы вытягивается по строчке. Ну не знают они IN !

  2. гы :) тоже способ тему для поста придумать :)

  3. Этим советам лет так 6-7, и большинство из них были актуальны ещё на PHP3!
    Хватит тиражировать МУСОР!

  4. Ха, вот уж баян так баян.
    Эта статья писалась, когда еще третий ПХП рулил, и для текущий версий все эти оптимизации давно не актуальны.

    Вывод: Статья – чистой воды некрофилия.

  5. “И уберите же обращение к БД в цикле!” И всегда получается?

  6. Я знаю что данная статья написана в 2001-м году, и поднял я её из архивов только благодаря людям которые занимаются именно такой оптимизацией PHP кода, вместо того чтобы обратить внимание на архитектуру системы!

  7. Мне кажеться, на этих вещах должны заморачиваться не разработчики веб приложений, а разработчики самого PHP…

  8. Спасибо! Очень интересная информация!

Comments are closed.