Как найти время выполнения моего кода?
Я использую приведенный ниже фрагмент.
Я не доволен этим?
list ($msec, $sec) = explode(' ', microtime());
$microtime = (float)$msec + (float)$sec;
Как найти время выполнения моего кода?
Я использую приведенный ниже фрагмент.
Я не доволен этим?
list ($msec, $sec) = explode(' ', microtime());
$microtime = (float)$msec + (float)$sec;
В LINUX:
time php -r "echo 'hello';"
выход:
привет
real 0m0.095s
пользователя 0m0.033s
sys 0m0.055s
time php hello.php
выход:
привет
real 0m0.073s
пользователя 0m0.025s
sys 0m0.047s
Я создал для этого простой класс:
class timer
{
private $start_time = NULL;
private $end_time = NULL;
private function getmicrotime()
{
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
function start()
{
$this->start_time = $this->getmicrotime();
}
function stop()
{
$this->end_time = $this->getmicrotime();
}
function result()
{
if (is_null($this->start_time))
{
exit('Timer: start method not called !');
return false;
}
else if (is_null($this->end_time))
{
exit('Timer: stop method not called !');
return false;
}
return round(($this->end_time - $this->start_time), 4);
}
# an alias of result function
function time()
{
$this->result();
}
}
В сценарии времени вы можете использовать его так:
$timer = new timer();
$timer->start();
// your code now
$timer->stop();
// show result now
echo $timer->result();
Я использую следующий класс для определения прошедшего времени:
class StopWatch {
private static $total;
public static function start() {
self::$total = microtime(true);
}
public static function elapsed() {
return microtime(true) - self::$total;
}
}
Вам просто нужно позвонить StopWatch::start
в начале и StopWatch::elapsed
всякий раз, когда вы хотите узнать, сколько времени прошло с самого начала.
Вы можете использовать параметр параметра microtime:
$microtime = microtime(true);
Если вы хотите профилировать свой script, используйте XDebug + {K, Win} Cachegrind, это бесплатные инструменты, которые предоставляют визуальную карту вашего исполнения кода.
Если вы хотите фактические тайминги процессора:
$rUsage = getrusage();
echo 'User time = '.sprintf('%.4f',($rUsage['ru_utime.tv_sec'] * 1e6 + $rUsage['ru_utime.tv_usec']) / 1e6).' seconds';
echo 'system time = '.sprintf('%.4f',($rUsage['ru_stime.tv_sec'] * 1e6 + $rUsage['ru_stime.tv_usec']) / 1e6).' seconds';
Если вы используете Unix, посмотрите команда времени:
Спасибо, что поделились вашей информацией.
Ниже приведено также МАЛЕНЬКИЙ БИТ рядом с моим решением.
function microtime_float() {
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
$time_start = microtime_float();
SOURCE CODE
$time_end = microtime_float();
$time = round($time_end - $time_start, 4);
echo "Last uncached content render took $time seconds";
<?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";
?>