2010-08-14 2 views
10

Как измерить определенные точки кода в PHP? Я могу использовать таймеры для расчета различий, я просто не уверен, что это лучшее решение.Измерение производительности PHP

+0

Мы все живем не в лучшем мире. Таймеры вполне пригодны для использования и переносимы. У вас есть несколько минут, чтобы найти узкое место. –

ответ

3

Вы можете использовать profiler как один, встроенный в Xdebug.

+1

или Zend Debugger при использовании Zend Studio – Gordon

7

Посмотрите на XDebug Profiler, чтобы сравнить производительность и многое другое.

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

+0

И если вы работаете в Linux, используйте kcachegrind для визуализации полученных файлов профилей. –

1

XDebug это круто, но если вы не хотите, чтобы установить эту библиотеку, вы можете попробовать следующее:

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

$benchmark_start = microtime(true); 
// Code goes here 
$benchmark_stop = microtime(true); 
$benchmark_total = $benchmark_stop - $benchmark_start; 
echo "The script took ". $benchmark_total." seconds"; 
1

немного более изощренными пример ручного профилирования с использованием таймеров
работает идеально для меня, особенно когда меня просят разобраться на каком-то живом сервере с FTP-доступом.
Нет необходимости упоминать, что профилирование является более важным (и полезным) на живом сервере, а не на ПК тепличного разработчика.

$TIMER['start']=microtime(TRUE); 
// some code 
$query="SELECT ..."; 
$TIMER['before q']=microtime(TRUE); 
    $res=mysql_query($query); 
$TIMER['after q']=microtime(TRUE); 
    while ($row = mysql_fetch_array($res)) { 
// some code 
    } 
$TIMER['array filled']=microtime(TRUE); 
// some code 
$TIMER['pagination']=microtime(TRUE); 

if ('127.0.0.1' === $_SERVER['REMOTE_ADDR']) { //I set my IP here 
    echo "<table border=1><tr><td>name</td><td>so far</td><td>delta</td><td>per cent</td></tr>"; 
    reset($TIMER); 
    $start=$prev=current($TIMER); 
    $total=end($TIMER)-$start; 
    foreach($TIMER as $name => $value) { 
    $sofar=round($value-$start,3); 
    $delta=round($value-$prev,3); 
    $percent=round($delta/$total*100); 
    echo "<tr><td>$name</td><td>$sofar</td><td>$delta</td><td>$percent</td></tr>"; 
    $prev=$value; 
    } 
    echo "</table><>"; 
} 
+0

Я бы не назвал это сложным. – raveren

+1

о да, вы правы! гениальнее было бы более подходящим словом –

Смежные вопросы