Неточное и случайное время выполнения кода

Я проверял разницу во времени выполнения этих 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>

почему я получаю один и тот же вывод снова и снова с разными утверждениями.

3 ответа

Эти операторы выполняются менее чем за миллисекунду. Поскольку ваша точность составляет одну миллисекунду, вы не можете получить значимый результат.

Если вы хотите протестировать это, вы должны выполнить итерацию большое количество раз, например, 10 000 раз.

Также ваш тест не позволит вам измерить разницу между строковыми представлениями, потому что вывод строки через echo занимает больше времени, чем оценка выражения.

Отличия к низкому. Попробуйте повторить каждое действие не менее 10 000 раз, тогда вы должны увидеть любые сопоставимые результаты. Вам не нужно использовать echo, назначение другой переменной будет работать так же.

Почему ваши результаты настолько случайны? Потому что время результата настолько мало, что любые другие процессы сервера могут повлиять на ваши результаты. Попробуйте эту версию:

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

стиль, но различия между другими не так важны:)

Время выполнения вашего скрипта действительно незначительно. Для получения четких результатов вы должны использовать оператор цикла с 100000 итераций, например, для каждого оператора.

Другие вопросы по тегам