Une meilleure façon de faire des tests de performance simples
-
13-09-2019 - |
Question
Lorsque l'on compare les performances des opérations voici comment je typicaly faire les tests:
<?php
$w = 'world';
$start1 = microtime(true);
for($i=0;$i<10000;$i++)
echo 'Hello ' . $w . '!';
$end1 = microtime(true);
$start2 = microtime(true);
for($i=0;$i<10000;$i++)
echo "Hello $w!";
$end2 = microtime(true);
$start3 = microtime(true);
for($i=0;$i<10000;$i++)
echo 'Hello ' + $w + '!';
$end3 = microtime(true);
echo "\n\n\n";
echo 'Concatination: ' . ($end1 - $start1) . "\nInline Var: " . ($end2 - $start2) . "\nAddition Operator: " . ($end3 - $start3);
Y at-il une meilleure façon de faire ces tests, peut-être un moyen plus fiable? Il semble que si je cours les mêmes tests à plusieurs reprises que je peux obtenir des résultats très différentes, par exemple, je courais les ci-dessus à plusieurs reprises et ce que je suis.
Concatination: 0.057300090789795
Inline Var: 0.092978954315186
Addition Operator: 0.090532064437866
Concatination: 0.10458517074585
Inline Var: 0.075299978256226
Addition Operator: 0.039528131484985
Concatination: 0.063031911849976
Inline Var: 0.07781195640564
Addition Operator: 0.022316932678223
Concatination: 0.079019069671631
Inline Var: 0.030484914779663
Addition Operator: 0.096056938171387
Concatination: 0.077842950820923
Inline Var: 0.052779912948608
Addition Operator: 0.037421941757202
Concatination: 0.084203004837036
Inline Var: 0.013757944107056
Addition Operator: 0.074331045150757
Concatination: 0.027930021286011
Inline Var: 0.05648398399353
Addition Operator: 0.049610137939453
Concatination: 0.041821956634521
Inline Var: 0.047034978866577
Addition Operator: 0.062538862228394
Concatination: 0.0071420669555664
Inline Var: 0.066315889358521
Addition Operator: 0.004756927490234
Concatination: 0.088988065719604
Inline Var: 0.022722959518433
Addition Operator: 0.06276798248291
Comme vous pouvez le voir à chaque cours d'exécution, il peut y avoir des résultats très différents.
La solution
Essayez xdebug, il peut profiler votre code tel qu'il fonctionne, la production d'un fichier de trace. Cela peut ensuite être exécuté par wincachegrind / kcachegrind ou similaire, pour vous donner des détails sur la façon dont votre exécution peformed, ce qui a pris le temps, etc etc.
Zend Platform comprend également un profileur, si vous avez cette disposition. Je ne me souviens pas si le libre Debugger Zend et / ou Zend Server Community Edition inclut le profileur aussi bien, mais son autre option pour le profil de votre code si vous pouvez y accéder.
Personnellement, je préfère xdebug.