На Главную

О производительности в PHP

May 15th, 2007 by Yuriy Drozdov

Давно пользуюсь темплитным движком Smarty, поэтому echo не использую. Но обстоятельства сложились таким образом, что надо было быстро набросать код и показать его работоспособность заказчику. В скрипте был следующий кусок кода:

foreach ($a_servers as $val)
{
  echo ‘Что-то выводилось’;
  //далее выполнялись какие-то действия
  echo ‘Потом снова был вывод’;
}

Массив $a_servers оказался большим (больше 2000 элементов) и скрипт выполнялся долго.

Заменил код на следующий:

$message = ”;
foreach ($a_servers as $val)
{
  $message .= ‘Что-то выводилось’;
  //далее выполнялись какие-то действия
  $message .= ‘Потом снова был вывод’;
}
echo $message;

Время выполнения скрипта уменьшилось на 2 секунды!

Вывод: если вы знаете как повысить производительность, не ленитесь и всегда делайте это.

Автор: Yuriy Drozdov

Похожие статьи:

RSS комментариев | Trackback URI

7 Комментариев

Comment by FX Poster
2007-05-15 17:12:43

Эм… А что понимается под “выполнялся долго”. Потому что если он выполнялся, скажем, пол минуты, то 2 сек выигрыш вполне может быть погрешностью.

Comment by y.drozdov
2007-05-15 17:18:54

Замеры производил согласно manual
function getmicrotime()
{
list($usec, $sec) = explode(” “, microtime());
return ((float)$usec + (float)$sec);
}

$time_start = getmicrotime();

for ($i=0; $i < 1000; $i++) {
// Ничего не делать. Повторить 1000 раз
}

$time_end = getmicrotime();
$time = $time_end - $time_start;

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

 
 
2007-05-17 10:23:01

В аналогичном случае (в скрипте несколько “echo”) я делал так:

ob_start();

// тут много чужого кода
// в нём там и сям есть echo()

$output = ob_get_contents();
ob_end_clean();
echo $outout;

Насчёт производительности не скажу (подозреваю, что оно аналогично твоему случаю), но в случае, когда нужно подключить к сайту чужой скрипт — неплохое решение.

Comment by y.drozdov
2007-05-17 16:25:43

согласен, решение интересное

 
 
Comment by lusever Subscribed to comments via email
2007-05-22 19:50:51

Еще можно foreach() заменить на for().

Comment by y.drozdov
2007-05-23 13:31:21

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

 
 
Comment by mihailt Subscribed to comments via email
2007-12-15 01:01:51

вот так получилось:

for - 0.0037438869476318
foreach - 0.001884086227417

 

Извините, комментарии закрыты.