更好的方式做简单的性能测试
问题描述:
当比较运算的性能,这是我会怎么做typicaly测试:更好的方式做简单的性能测试
<?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);
有没有更好的方式做这些测试时,可能是一个更可靠的方法?看起来,如果我多次运行相同的测试,我可以得到完全不同的结果,例如我跑了上述几次,这就是我得到的。
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
正如您在每次运行时可能会看到的结果大不相同。
答
尝试使用xdebug,它可以在您的代码运行时生成一个跟踪文件。然后这可以通过wincachegrind/kcachegrind或类似的方式运行,为您提供有关如何执行执行,花费时间等的详细信息。
如果您有可用的Zend平台,还包含一个分析器。我不记得免费的Zend Debugger和/或Zend Server Community Edition是否包含分析器,但是如果可以的话,它还有另一个选择分析代码的选项。
个人而言,我更喜欢xdebug。
您选择的字符串连接方法几乎与您的应用程序的性能无关。当你试图从字符串连接中挤出几纳秒的执行时间时,你可能会得到一个O(n^3)嵌套循环,或者在没有索引的查询中运行8秒。此外,你忘了第四种形式:echo'Hello',$ w,'!'; – 2009-07-14 02:14:43