Я использовал 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
Как так получилось?
Я делаю что-то неправильно?
Я предполагаю, что вы оставили крошечную деталь из вашего описания. Я думаю, что результат, который вы на самом деле видели, был больше похож на …
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 (), чтобы показать, что что-то происходит.]
Смотря что делает код между двумя шагами. Закомментируйте код между двумя шагами и (но вы правы, это странно, если страница возвращает менее 1 секунды ..)
// Sleep for a while
usleep(100);
Проверьте, измеряет ли микротайм правильную дельту времени.