Ускорение PHP-программ

12 Сен 2007

PHP ускорение и оптимизацияКак без особых усилий заставить PHP-код работать на порядок быстрее ? Перед тем как задаваться вопросами кеширования и масштабирования стоит попробовать оптимизировать код. Есть ряд несложных правил:

  • Выносите переменные из строк. Примерно так: <?php $x=»test».$test; ?> , это на 25-40% быстрее.
  • Имена переменных должны быть короче 7 символов. Это быстрее на 15%.
  • В массивах не стоит обращаться к элементам по имени и без кавычек. Особенно в многомерных. Сэкономите 40%.
  • А если обращение к элементу массива вынести из строки (как в пункте 1), то можно сэкономить ещё 25-30%.
  • Используйте Perl-ориентированные регулярные выражения. Или хотя бы сравнивайте их с POSIX-аналогами по скорости выполнения. Скорость может отличаться до 200% на разных запросах.
  • SizeOf() быстрее Count(), а в циклах sizeof лучше вообще заменить на переменную, for и while практически не отличимы, для перебора простых индексных массивов нужно использовать for или while, а для ассоциативных массивов — foreach. Плюс 30% при соблюдении.
  • Для чтения файла file() быстрее, чем fopen()+цикл. Ускорение до 40%.

Прочитать про всё это подробнее, посмотреть графики скорости и загрузить все примеры можно вот тут: «Оптимизация программ на PHP«.

Жилинский Владимир.






 

Жилинcкий Владимир     .

Написано 12 сентября 2007 года в 12:47


Друзья добавляют:

+Для строк лучше юзать одинарные кавычки ‘, нежели двойные »
+По возможности юзать switch, нежели if else
+Использовать указатели &$var
+меньше разрывать код html-блоками, примерно так:
html htmk html
+Ну и конечно не стОит забывать о битовых операторах для хранения флаговых (чекбоксовых) наборов значений.

 

Евгений     .

Написано 12 сентября 2007 года в 16:59


> +Ну и конечно не стОит забывать о битовых операторах для хранения флаговых (чекбоксовых) наборов значений.

почему это быстрее отдельных переменных для каждого значения?

 

mikolka     .

Написано 12 сентября 2007 года в 17:04


спасибо, это полезенькая информация

 

Жилинcкий Владимир     .

Написано 12 сентября 2007 года в 17:06


А чёрт его знает… Почему-то так =)
Особенность платформы, полагаю. Сам не пробовал с этим играться.

 

Жилинcкий Владимир     .

Написано 13 сентября 2007 года в 09:32


На зеркале в яндекс-блогах юзверь zvepr рассказывает о указателях (мне показалось очень интересным объяснение):

допустим что в переменная $x — массив на 2 мегабайта. это 2 мегабайта памяти (допустим база 1000 пользователей со всей их информацей, которая в итоге понадобиться), которые занимаются процессором языка.

в первом случае $y = $x — в переменную $у кладуться те же значения, что и в $x — и уже получается что 4 мегабайта памяти мы засрали! Йее, какие мы клевые парни -)

во втором случае в $x лежат те же 1000 психов на 2 мегабайта. Но когда мы пишем $y = &$x, переменная $y занимает уже не те же 2 мегабайта, а пару байт (если не меньше) — и в итоге из обоих переменных мы можем считать нужные значения но это уже не 4 мега памяти процессора, а всего лишь 2.

Ну теперь вопрос — нафига мне приравнивать в $y переменную $x, если я могу считать все непосредственно из $x?? — ответ: в функциях такого не проканает

когда мы пишем foo($x) — внутри функции создается еще одна перменная, которая (как и в пером случае) копирует все значения из $x — и снова в процессоре заняты 4 мега, и снова мы клевые парни, Йееее!!!! А теперь вопрос — нафига нам в функцию копировать эти значения, если эта функция просто, допустим, проходит по этим значениям и выводит(сохранят в файл, сохраняет в бд) их, не изменяя? вот тут намного разумнее сделать foo( &$x );

Это особенно эффективно для работы с темплейт-функциями и функциями сохранения, особенно с функциямми, котрые работают со списками!

Ну и чтобы добить пример фактом: вот поставил ты себе прогу, допустим для работы с BlueTooth адаптером, в program files. Но ведь до program files далеко — нада на рабочий стол вынуть. Что ты сделаешь? — скопируешь себе эту прогу (все ее файлы) на рабочий стол (вариант один), или просто кинешь на раб. стол ярлык (вариант два) ? )))

 

LeKz     .

Написано 13 сентября 2007 года в 09:34


Это не первая статья посвященная оптимизации PHP кода, которую я читаю. И в основном все ориентировано на PHP 3. Почему не более поздних версий? Да просто. Язык развиваются, разработчики наученные на прежних ошибках умнеют :) Ну и один из главных факторов — быстрый рост мощностей… Вспомните время, когда писали на аспе (сам не писал, но рассказывали) — боролись за каждый байт информации, оптимизировали все, что только можно, а сейчас…эх.. горе-программистов 90 из 100 и эти «программисты» пишут код, который иногда легче выкинуть чем переписать :)

 

Жилинcкий Владимир     .

Написано 13 сентября 2007 года в 09:38


Таких фанатиков ещё много. 128кб-конкурсы ещё шумят на Chaos Constructions :-D

UPD: у меня плохое настроение, поэтому толпа умников-баянистов меня напрягает.
Комментарии закрыты.

 

Software Development Guide     .

Написано 27 сентября 2007 года в 16:55


Software Development Guide…

I couldn’t understand some parts of this article, but it sounds interesting…

 


[…] распознавания цифер на картинках). Еще понравилось Ускорение РНР-программ, т.к. я сейчас занимаюсь сайтом, который много парсит и […]

© 2007-2010 Блог интернет-разработчика, автор — Zhilinsky.ru.
При использовании информации ссылка на источник обязательна.