С незапамятных времён использую следующий класс собственного написания:
class Benchmark
{
public $startTime = 0;
public $endTime = 0;
private function getmt()
{
//return array_sum(explode(" ", microtime()));
return microtime(TRUE);
}
public function start()
{
$this->startTime = $this->getmt();
}
public function stop()
{
$this->endTime = $this->getmt();
}
public function get($round = 2)
{
if ($this->startTime === 0)
{
return ('Before using <b>' . __FUNCTION__ . '</b> , you should first start the timer!');
}
return number_format(($this->endTime - $this->startTime), $round, '.', '');
}
}
Испоьзование:
// require_once 'Benchmark.class.php';
$b = new Benchmark();
$b->start();
sleep(1); // sleep one second
$b->stop();
echo $b->get(); // ~ 1 sec
Обрати внимание на приватный метод
getmt:
private function getmt()
{
//return array_sum(explode(" ", microtime()));
return microtime(TRUE);
}
В нём 2 способа получения этого самого микротайма:
1) старый через эксплод+эрэй_сум
2) новый через флаг в микротайме
Я заметил, что на некоторых серверах второй вариант выдаёт дико неточный результат, а первый работает всегда железно, но он через-жопный (ну согласитесь, там же массивы волохаются)
Попробуй у себя 2 варианта по очереди.
Апд: Запустил твой код у себя на сервере:
0.58410406112671
0.63313007354736
0.63548994064331
0.6358630657196
0.63662004470825
0.63760709762573
0.63862204551697
0.64616799354553
|
Фурычит