Benchmark със $_SERVER["REQUEST_TIME_FLOAT"]

dakata__92

Super Moderator
Код:
<?php
// Randomize sleeping time
usleep(mt_rand(100, 10000));

// As of PHP 5.4.0, REQUEST_TIME_FLOAT is available in the $_SERVER superglobal array.
// It contains the timestamp of the start of the request with microsecond precision.
$time = microtime(true) - $_SERVER["REQUEST_TIME_FLOAT"];

echo "Did nothing in $time seconds\n";
?>

Попаднах на този код и ми стана интересно дали този ред ми дава реалната стойност на зареждане на приложението до тази точка?
$time = microtime(true) - $_SERVER["REQUEST_TIME_FLOAT"];

Тоест идеята е ако извикам този ред някъде в някое приложение просто да ми изпише до момента какво време е отнело на приложението да зареди. Тоест няма нужда при стартирането му да му дам примерно:
PHP:
$executionTime = new ExecutionTime();
$executionTime->Start();
// code
$executionTime->End();
echo $executionTime;
а просто
PHP:
// code
$executionTime = new ExecutionTime();
print $executionTime->getTime();
Въпроса ми конкретно е дали $_SERVER["REQUEST_TIME_FLOAT"]; е надеждна за измерването на зареждането до определена точка на приложението.
 
То си пише:

It contains the timestamp of the start of the request with microsecond precision.

Демек това е времето когато е получен request-a от уеб сървъра, а не когато е върнат response-а към клиентския browser.

Но:

PHP:
$time = microtime(true) - $_SERVER["REQUEST_TIME_FLOAT"];

Би трябвало да покаже г/д правилно време +/- някои мили секунди стига да е в края.
 
Интересува ме дали ще е горе долу точно, че няма да е с пълна точност няма но дали е поне с достатъчна точност.
 
Трябва да тестваш. :)

http://php.net/manual/en/function.sleep.php

Тази функция ще забави изпълнението на скрипта за определено време.

PHP:
<?php
$req_time = $_SERVER["REQUEST_TIME_FLOAT"];
$res_time = microtime(true) - $req_time;
echo $res_time;

PHP:
<?php
$req_time = $_SERVER["REQUEST_TIME_FLOAT"];
sleep(10);
$res_time = microtime(true) - $req_time;
echo $res_time;
 
Много странни резултати получавам. Споделете защо се получава така.
PHP:
sleep(2);
$res_time = microtime(true) - $_SERVER["REQUEST_TIME"];
echo $res_time;
sleep(2);
$res_time = microtime(true) - $_SERVER["REQUEST_TIME_FLOAT"];
echo '<br>'.$res_time;
$start = microtime(true);
sleep(2);
$res_time = microtime(true) - $start;
echo '<br>'.$res_time;
 
Не го тестваш правилно:

PHP:
<?php
$var_time = microtime(true);

sleep(2);

$req_time = $_SERVER["REQUEST_TIME"];
$req_time_fl = $_SERVER["REQUEST_TIME_FLOAT"];

$curr_time = microtime(true);
echo 'var_time: '. ($curr_time - $var_time)
    .'<br>req_time: '. ($curr_time - $req_time) 
    .'<br>req_time_fl: '. ($curr_time - $req_time_fl);

$_SERVER["REQUEST_TIME"] се сетва в момента в който сървъра получи HTTP request-а от клиентския browser.

Демек, когато HTTP сървъра получи "GET /index.php HTTP/1.1" request.
 
При тестовете които направих установих, че ме задоволява достатъчно. Реално има мнооого малко забавяне а на мен ми трябва точно от получаване на хедъра до моментната точка да измеря за колко време сървърет приема заявката кода ми се активира и е заредил точно до определената от мен точка. Тоест нещата са повече от задоволителни. :)
 

Back
Горе