Неточное и случайное время выполнения кода
Я проверял разницу во времени выполнения этих 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 итераций, например, для каждого оператора.