0

我正在检查这 4 个具有相同变量的字符串的执行时间差异:

$name= "rahul";
echo "My name is $name"  
echo "My name is ".$name;  
echo "My name is {$name}"; 
echo "My name is '{$name}'";

但每次我尝试它时,我只得到 3 或 4 个随机答案,即。 0 或 0.00099992752075195 或 0.0010001659393311

我的代码是:

<?php
function microtime_float()
 {
     list($usec, $sec) = explode(" ", microtime());
     return ((float)$usec + (float)$sec);
 }

 $name = 'rahul' ;

 $time_start = microtime_float();
 echo "My name is $name";  // First style
 $time_end = microtime_float();
 $time = $time_end - $time_start;

 echo "  // $time seconds\n   ";



 $time_start2 = microtime_float();
 echo "My name is ".$name;  // Second style
 $time_end2 = microtime_float();
 $time2 = $time_end2 - $time_start2;

 echo " // $time2 seconds\n   ";



 $time_start3 = microtime_float();
 echo "My name is {$name}";  // Third style
 $time_end3 = microtime_float();
 $time3 = $time_end3 - $time_start3;

 echo " // $time3 seconds\n";



 $time_start4 = microtime_float();
 echo "My name is '{$name}'";  // Fourth style
 $time_end4 = microtime_float();
 $time4 = $time_end4 - $time_start4;

 echo " // $time4 seconds\n";

 ?>

我通过 cmd 计算它,我的输出是:

C:\wamp\www\my_jquery>php q.php

My name is rahul  // 0 seconds

   My name is rahul // 0 seconds

   My name is rahul // 0 seconds

My name is 'rahul' // 0 seconds

C:\wamp\www\my_jquery>php q.php

My name is rahul  // 0 seconds

   My name is rahul // 0 seconds

   My name is rahul // 0 seconds

My name is 'rahul' // 0 seconds

C:\wamp\www\my_jquery>php q.php

My name is rahul  // 0.00099992752075195 seconds

   My name is rahul // 0 seconds

   My name is rahul // 0 seconds

My name is 'rahul' // 0 seconds

C:\wamp\www\my_jquery>php q.php

My name is rahul  // 0 seconds

   My name is rahul // 0 seconds

   My name is rahul // 0 seconds

My name is 'rahul' // 0 seconds

C:\wamp\www\my_jquery>php q.php

My name is rahul  // 0 seconds

   My name is rahul // 0 seconds

   My name is rahul // 0.00099992752075195 seconds

My name is 'rahul' // 0 seconds

C:\wamp\www\my_jquery>php q.php

My name is rahul  // 0 seconds

   My name is rahul // 0.00099992752075195 seconds

   My name is rahul // 0.0010001659393311 seconds

My name is 'rahul' // 0 seconds

C:\wamp\www\my_jquery>php q.php

My name is rahul  // 0 seconds

   My name is rahul // 0.00099992752075195 seconds

   My name is rahul // 0.00099992752075195 seconds

My name is 'rahul' // 0 seconds

C:\wamp\www\my_jquery>php q.php

My name is rahul  // 0 seconds

   My name is rahul // 0.00099992752075195 seconds

   My name is rahul // 0.00099992752075195 seconds

My name is 'rahul' // 0 seconds

C:\wamp\www\my_jquery>php q.php

My name is rahul  // 0.00099992752075195 seconds

   My name is rahul // 0 seconds

   My name is rahul // 0 seconds

My name is 'rahul' // 0.00099992752075195 seconds

C:\wamp\www\my_jquery>php q.php

My name is rahul  // 0.00099992752075195 seconds

   My name is rahul // 0 seconds

   My name is rahul // 0 seconds

My name is 'rahul' // 0.0010001659393311 seconds

C:\wamp\www\my_jquery>php q.php

My name is rahul  // 0 seconds

   My name is rahul // 0.0010001659393311 seconds

   My name is rahul // 0.00099992752075195 seconds

My name is 'rahul' // 0 seconds

C:\wamp\www\my_jquery>php q.php

My name is rahul  // 0.00099992752075195 seconds

   My name is rahul // 0 seconds

   My name is rahul // 0.00099992752075195 seconds

My name is 'rahul' // 0.0010001659393311 seconds

C:\wamp\www\my_jquery>php q.php

My name is rahul  // 0 seconds

   My name is rahul // 0 seconds

   My name is rahul // 0.0010001659393311 seconds

My name is 'rahul' // 0 seconds

C:\wamp\www\my_jquery>php q.php

My name is rahul  // 0 seconds

   My name is rahul // 0.00099992752075195 seconds

   My name is rahul // 0 seconds

My name is 'rahul' // 0 seconds

C:\wamp\www\my_jquery>php q.php

My name is rahul  // 0 seconds

   My name is rahul // 0.00099992752075195 seconds

   My name is rahul // 0.00099992752075195 seconds

My name is 'rahul' // 0 seconds

C:\wamp\www\my_jquery>

为什么我用不同的语句一次又一次地得到相同的输出。

4

3 回答 3

2

差异很小。尝试至少重复每个动作 10 000 次,然后您应该会看到任何可比较的结果。您不需要使用 echo,分配给另一个 var 也一样。

为什么你的结果如此随机?因为结果时间非常短,以至于任何其他服务器进程都可能影响您的结果。试试这个版本:

<?php
function microtime_float()
 {
     list($usec, $sec) = explode(" ", microtime());
     return ((float)$usec + (float)$sec);
 }

 $times = 10000;

 $name = 'rahul' ;

 $time_start = microtime_float();

 // Make loop
 for($i = 0; $i < $times; $i++) {
     $testvar = "My name is $name";  // First style
 }

 $time_end = microtime_float();
 $time = $time_end - $time_start;
 echo "  // $time seconds\n   ";

 //and same for other styles

 ?>

此外,许多其他开发人员证明,最好的解决方案是使用

echo 'My name is ' . $name;

风格,但其他人之间的差异并不重要:)

于 2013-08-17T11:24:05.443 回答
2

这些语句的执行时间不到 I 毫秒。由于您的精度是一毫秒,因此您无法获得有意义的结果。

如果要对此进行基准测试,则必须进行大量迭代,例如 10 000 次。

此外,您的基准测试将不允许您测量字符串表示之间的差异,因为通过 echo 输出字符串比评估表达式需要更多时间。

于 2013-08-17T11:24:43.240 回答
0

你的脚本的执行时间真的可以忽略不计。为了获得清晰的结果,您应该使用一个循环语句,例如每个语句有 100.000 次迭代。

于 2013-08-17T11:25:59.133 回答