Оптимизация – это процесс модификации системы для улучшения её эффективности (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 не должен тратить более одной секунды на её генерацию.
Ползеные замечания.
Товарищ показывал код индусов – цикл, в котором из базы вытягивается по строчке. Ну не знают они IN !
гы :) тоже способ тему для поста придумать :)
Этим советам лет так 6-7, и большинство из них были актуальны ещё на PHP3!
Хватит тиражировать МУСОР!
Ха, вот уж баян так баян.
Эта статья писалась, когда еще третий ПХП рулил, и для текущий версий все эти оптимизации давно не актуальны.
Вывод: Статья – чистой воды некрофилия.
“И уберите же обращение к БД в цикле!” И всегда получается?
Я знаю что данная статья написана в 2001-м году, и поднял я её из архивов только благодаря людям которые занимаются именно такой оптимизацией PHP кода, вместо того чтобы обратить внимание на архитектуру системы!
Мне кажеться, на этих вещах должны заморачиваться не разработчики веб приложений, а разработчики самого PHP…
Спасибо! Очень интересная информация!