PHP microtime () правильно?

Я использовал microtime () для проверки времени выполнения кода.
Но это кажется очень странным, потому что время отслеживается не правильно.

Так что в моем test.php у меня есть код, подобный следующему:

$debug = true;
$start = microtime(true);
$newline = "<br/>";

...

if ($debug) {
$time_elapsed_secs = microtime(true) - $start;
$start = microtime(true);
echo 'Step 1 Done: ' . $time_elapsed_secs . $newline; }

...

if ($debug) {
$time_elapsed_secs = microtime(true) - $start;
$start = microtime(true);
echo 'Step 2 Done: ' . $time_elapsed_secs . $newline; }

Затем, когда я открываю URL в браузере, он отвечает менее чем за 1 секунду,
но это показывает что-то странное значение, как
Шаг 1 Выполнено: 0.0026565
Шаг 2 Выполнено: 9.8646454

Как так получилось?
Я делаю что-то неправильно?

1

Решение

Я предполагаю, что вы оставили крошечную деталь из вашего описания. Я думаю, что результат, который вы на самом деле видели, был больше похож на …

Step 1 Done: 0.0026565
...
Step 2 Done: 9.8646454E-5

PHP поместит числа с плавающей точкой в ​​научную нотацию, когда они будут ниже 0,0001. Чтобы все было совместимо с чтением в выходных данных, попробуйте изменить код на следующий, чтобы отображать микротопы в десятичной записи.

$debug = true;
$start = microtime(true);
$newline = "<br/>";

usleep(30);

if ($debug) {
$time_elapsed_secs = microtime(true) - $start;
$start = microtime(true);
echo 'Step 1 Done: ' . sprintf( '%f', $time_elapsed_secs ) . $newline; }

usleep(1);

if ($debug) {
$time_elapsed_secs = microtime(true) - $start;
$start = microtime(true);
echo 'Step 2 Done: ' . sprintf( '%f', $time_elapsed_secs ) . $newline; }
[Примечание: добавлены вызовы usleep (), чтобы показать, что что-то происходит.]
2

Другие решения

Смотря что делает код между двумя шагами. Закомментируйте код между двумя шагами и (но вы правы, это странно, если страница возвращает менее 1 секунды ..)

// Sleep for a while
usleep(100);

Проверьте, измеряет ли микротайм правильную дельту времени.

1

По вопросам рекламы [email protected]