2013-08-17 80 views
0

我檢查這些四根弦用相同的變量的執行時間差:Unprecise和隨機代碼執行時間

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

但每次我嘗試它,我只拿到了3個或4個隨機的答案IE瀏覽器。 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> 

爲什麼我一次又一次地得到相同的輸出與不同的陳述。

+0

你應該鏈接到保存在其他地方的輸出,這會讓問題太長..也檢查microtime的手冊頁,該函數有一個可選參數,您可以使用(http://php.net/ microtime中) – mishu

+1

所花費的時間是如此的單一回波非常小,你需要把在一個循環,並嘗試10K倍和時間 – 2013-08-17 11:20:27

+1

你測量不僅在不同的回聲,而且當時的拍攝,並處理它。它也沒有必要消除這個空間,稱'microtime(true)'來獲得一個現成的測量值。 – Sven

回答

2

差異是低。試着重複每一個動作至少10000次,然後你應該看到任何可比的結果。你不需要使用回聲,分配給另一個變種將工作相同。

爲什麼你的結果是如此隨機?由於結果時間太短,以至於其他服務器進程可能會影響結果。試試這個版本:

<?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; 

風格,但其他人之間differencies都不是很重要:)

+0

感謝這是一個好的.. :) – Rahul

2

這些語句取小於I毫秒執行。由於你的精度是1毫秒,你不能得到有意義的結果。

如果你想基準這一點,你必須重複大量的時間,比如10萬次。

此外,您的基準測試不會允許您測量字符串表示之間的差異,因爲通過回顯的字符串輸出需要比表達式評估更多的時間。

+0

感謝您的建議 – Rahul

0

腳本的執行時間確實是可以忽略不計。爲了獲得清晰的結果,例如每個語句應該使用循環語句,每次迭代100.000次。