Comment puis-je évaluer certains éléments de code en PHP ? Je peux utiliser des timers pour calculer les différences, mais je ne suis pas sûr que ce soit la meilleure solution.
Réponses
Trop de publicités?Jetez un coup d'œil à XDebug Profiler pour évaluer les performances et plus encore.
Le Profiler de Xdebug est un outil puissant qui vous donne la possibilité d'analyser votre code PHP et de déterminer les goulots d'étranglement ou, plus généralement, de voir quelles parties de votre code sont lentes et pourraient et qui pourraient être améliorées.
XDebug est cool mais si vous ne voulez pas installer cette bibliothèque, vous pouvez essayer ce qui suit :
Ce que j'utilise pour localiser les goulots d'étranglement possibles, c'est :
$benchmark_start = microtime(true);
// Code goes here
$benchmark_stop = microtime(true);
$benchmark_total = $benchmark_stop - $benchmark_start;
echo "The script took ". $benchmark_total." seconds";
Un exemple un peu plus sophistiqué de profilage manuel utilisant des timers
fonctionne parfaitement pour moi, surtout quand on me demande de régler des choses sur un serveur en direct avec un accès FTP uniquement.
Il va sans dire que le profilage est bien plus important (et utile) sur un serveur en direct que sur le PC d'un développeur.
$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><>";
}