sbwerewolf / stopwatch
原始计时器,具有简单的开始和停止功能,用于测量每一个时间段以及整个时间。
v1.2.3
2023-02-10 23:48 UTC
Requires
README
原始计时器,具有简单的开始和停止方法,用于测量每一个时间段和所有时间。
如何安装
composer require sbwerewolf/stopwatch
如何使用
echo 'Duration is ' . (new \SbWereWolf\Stopwatch\HRTimeStopwatch()) ->start()->stop()->getLastTime()->asNanoSeconds() . ' ns' . PHP_EOL;
Duration is 300 ns
Stopwatch支持不同引擎
hrtime()
microtime()
DateTimeImmutable
\SbWereWolf\Stopwatch\HRTimeStopwatch
实现了 hrtime()
引擎。
\SbWereWolf\Stopwatch\MicroTimeStopwatch
实现了 microtime()
引擎。
\SbWereWolf\Stopwatch\DateTimeStopwatch
实现了 DateTimeImmutable
引擎。
高级使用
$stopwatch = new SbWereWolf\Stopwatch\HRTimeStopwatch(); echo (new DateTimeImmutable())->format('s.u') . PHP_EOL; $stopwatch->start(); time_nanosleep(0, 100); $stopwatch->stop(); echo (new DateTimeImmutable())->format('s.u') . ' Period 1 duration: ' . $stopwatch->getLastTime()->asNanoSeconds() . ' ns' . PHP_EOL; time_nanosleep(0, 100); $stopwatch->start(); time_nanosleep(0, 100); $stopwatch->stop(); echo (new DateTimeImmutable())->format('s.u') . ' Period 2 duration: ' . $stopwatch->getLastTime()->asNanoSeconds() . ' ns' . PHP_EOL; /* Summa of all time periods */ echo (new DateTimeImmutable())->format('s.u') . ' Periods 1 + 2 summary duration: ' . $stopwatch->getSummaryTime()->asNanoSeconds() . ' ns' . PHP_EOL; /* Overall time */ echo (new DateTimeImmutable())->format('s.u') . ' Whole process duration: ' . $stopwatch->getWholeTime()->asNanoSeconds() . ' ns' . PHP_EOL;
02.380004 02.380020 Period 1 duration: 12400 ns 02.380032 Period 2 duration: 3600 ns 02.380035 Periods 1 + 2 summary duration: 16000 ns 02.380044 Whole process duration: 24000 ns
使用计时器进行任何过程的基准测试
$stopwatch = new SbWereWolf\Stopwatch\HRTimeStopwatch(); $benchmark = new SbWereWolf\Stopwatch\Benchmark($stopwatch); $delay = 100; echo "Variable value before step z callback `$delay`" . PHP_EOL; /* Variable value before step z callback `100` */ $benchmark->step('z', function () use ($delay) { time_nanosleep(0, $delay); $delay++; }); echo "after step z callback `$delay`" . PHP_EOL; /* after step z callback `100` */ /* Variable does not change its value */ $benchmark->step('x', function () use (&$delay) { time_nanosleep(0, $delay); $delay += 999; }); echo "after step x callback `$delay`" . PHP_EOL; /* after step x callback `1099` */ /* Variable does change its value */ $benchmark->step('c', function () use (&$delay) { $delay -= 999; time_nanosleep(0, $delay); }); echo "after step c callback `$delay`" . PHP_EOL; /* after step c callback `100` */ /* Variable does change its value */ echo "Benchmark steps measurement is:" . PHP_EOL; $i=0; foreach ($benchmark->report() as $desc => $val) { /** @var SbWereWolf\Stopwatch\ITimerReadings $val */ echo "$desc => {$val->asNanoSeconds()} ns" . PHP_EOL; $i++; } $totalNanoseconds = $benchmark->total()->asNanoSeconds(); echo "Total is $totalNanoseconds ns";
variable value before step z `100` after step z `100` after step x `1099` after step c `100` Benchmark steps measurement is: z => 15800 ns x => 7600 ns c => 4100 ns Total is 27500 ns
联系方式
Volkhin Nikolay
e-mail ulfnew@gmail.com
phone +7-902-272-65-35
Telegram @sbwerewolf
通过即时通讯与我聊天