2010-08-14 15 views
10

W jaki sposób mogę porównywać pewne fragmenty kodu w PHP? Mogę użyć timerów do obliczenia różnic, po prostu nie jestem pewien, czy jest to najlepsze rozwiązanie.Pomiar wydajności PHP

+0

Wszyscy żyjemy nie w najlepszym świecie. Zegary są całkiem użyteczne i bardzo przenośne. Zajmie ci to kilka minut, aby zlokalizować wąskie gardło. –

Odpowiedz

7

Spójrz na XDebug Profiler, aby porównać wydajność i wiele więcej.

Xdebug za Profiler to potężne narzędzie który daje możliwość analizy kodu PHP i określenia zatorów lub ogólnie widzieć który fragmenty kodu są powolne i może użyć zwiększenie prędkości.

+0

Jeśli używasz Linuksa, użyj kcachegrind do wizualizacji wynikowych plików profilu. –

1

XDebug jest fajne, ale jeśli nie chcesz, aby zainstalować tę bibliotekę, można spróbować wykonać następujące czynności:

Co mogę używać, aby zlokalizować ewentualne szyjki butelki jest:

$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

nieco bardziej wyrafinowane przykład ręcznego profilowania przy użyciu timerów
działa idealnie dla mnie, szczególnie gdy jestem poproszony o sortowanie rzeczy na niektórych serwerach na żywo tylko z dostępem FTP.
nie trzeba wspominać, że profilowanie jest o wiele ważniejsze (i użyteczne) na serwerze na żywo, a nie na komputerze dewelopera cieplarnianego.

$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

Nie nazwałbym tego tak wyrafinowanym. – raveren

+1

o tak, masz rację! geniusz byłby bardziej odpowiednim słowem –