Псевдооптимизация PHP

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

Во-первых, такие «тесты» замеряются при многотысячном прогоне в цикле. Потому что если сравнить скорость print и echo при однократном вызове, то разницы нет вообще. А ведь при использовании MVC функция печати вызывается 1 раз.

Во-вторых, время выполнения реального скрипта (на реальном сайте) на 99% состоит из запросов к базе, правильной архитектуры базы и использования кэша. Живой пример. Простановка нескольких индексов в базе будет в миллион раз эффективней замены двойных кавычек на одинарные. Я уже молчу про использование кэширования.

В-третьих, зачастую эти советы предлагают превратить код в кромешный ад. Например, заменить ООП на функции, использование коротких имен переменных ($a, $b, $c вместо $user, $title) и т.д. В этом и состоит главная опасность этих "полезных" советов. Иногда встречаются подобные советы по оптимизации базы. Например, никогда не использовать NULL.

В-четвертых, нет ничего проще, чем проверить насколько быстрее работает какой-то кусок кода и, самое главное, сравнить это время со временем выполнения всего скрипта.

$start_time = microtime(true);
… какой-то код …
$end_time = microtime(true);
$result = $end_time - $start_time;
echo $result; // выводим время выполнения

#1

Недавно на хабре статья такая была, о псевдооптимизации, так мало того, статья даже на главную вышла.

Хрень, 7.02.2011 - 20:51
#2

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

altmind, 7.02.2011 - 22:52
#3

для профилирования и поиска узких мест лучше все-таки xdebug + kcachegrind использовать.

http://kcachegrind.sourceforge.net/html/Screenshots.html

Сергей, 8.02.2011 - 00:08
#4

профайлеры - это хорошо, но внимательно читаем самое начало
"Статья для новичков."

admin, 8.02.2011 - 00:09
#5

altmind, парсинг скрипта мы можем ускорить только загнав его в байткод с помощью APC, eAcselerator. Но в данной статье я рассматриваю узкие места и экономию на спичках внутри скрипта. И для этого случая вполне годится microtime()

admin, 8.02.2011 - 00:18
#6

Вот статейка с хабры http://habrahabr.ru/blogs/php/112474/

sergunik, 8.02.2011 - 11:39
#7

на хабре каждый год подобное проскакивает, набирая довольно много плюсов от школоты.
http://habrahabr.ru/blogs/php/22799/

admin, 8.02.2011 - 13:41
#8

Насчет ссылки в #7 и #6 комментариях - многое написано верно. Ссылка из статьи - пример из далекого прошлого (на главной php.spb.ru "новости" датированы 2003 годом)

Естественно, при оптимизации реальных проектов следует искать узкие места ("бутылочное горлышко") и начинать с них.

ps. И вообще, преждевременная оптимизация - зло..., однако использование, например, $[a] вместо $['a'], на мой взгляд, недопустимо :)

Levik, 28.02.2011 - 21:52
Оставить комментарий