Можем ли мы использовать $ _SERVER ['REQUEST_TIME_FLOAT'], чтобы получить надежное время процесса? - PullRequest
1 голос
/ 28 апреля 2019

Я вижу, что каждый предлагает использовать переменную, такую ​​как

$start_time = microtime(TRUE);

в верхней части скрипта, а затем в последней строке мы делаем:

$process_time = microtime(TRUE) - $start_time;

Мой вопрос таков:можем ли мы надежно использовать $_SERVER['REQUEST_TIME_FLOAT'] и вообще пропустить $ start_time?если так, то почему все еще предлагают использовать $ start_time сверху?

Пример того, что я имею в виду:

<?php
// No need for $start_time...

// All the stuff we do to have the benchmark at the end

// Only this line needed to display execution time
echo "Processed in: ". bcsub(microtime(TRUE), "{$_SERVER['REQUEST_TIME_FLOAT']}", 4);
?>

1 Ответ

3 голосов
/ 28 апреля 2019

Это зависит от того, что вы пытаетесь измерить.

$_SERVER['REQUEST_TIME_FLOAT'] устанавливается в тот момент, когда ваш веб-сервер передает обработку PHP. Это означает, что всегда будет отметка времени, которую PHP начинает обрабатывать запрос. Так что, если вы хотите измерить, сколько времени понадобилось PHP, чтобы добраться до определенной точки, вы можете использовать это. Недостатком является то, что вы на самом деле не знаете, что делает PHP до того, как он попадет в ваш код. В конфигурации PHP auto-prepend могут быть файлы, которые занимают время обработки прежде, чем он прочитает первую строку вашего кода. Но если вы на самом деле хотите также измерить это время, у вас есть , чтобы использовать это свойство.

С другой стороны, вы можете запросить microtime(true), когда захотите, что помогает, когда вы хотите измерить производительность определенного фрагмента кода . Например, может быть, вы находитесь в инфраструктуре MVC и вам нужно только измерить, сколько времени потребуется вашей модели для извлечения и подготовки набора результатов базы данных, и вам неважно, сколько времени потребовалось среде, чтобы выяснить, какой контроллер / действие нужно было позвонить или сколько времени потребовалось вашему контроллеру, чтобы запросить информацию у вашей модели.

...