ayesh / php-timer
高精度且单调的计时器,满足您的所有需求。支持计时器开始、暂停、恢复、停止、读取和最小转换。
Requires
- php: ^7.3 || ^8.0
Requires (Dev)
- phpunit/phpunit: ^9.0
- symfony/phpunit-bridge: ^4.0
README
摘要
一个帮助类,用于计算特定任务所需时间。
此类类似于 phpunit/php-timer,但不是分支,也不模仿其功能。
- 通过给定键的多个计时器。
- 读取当前经过的时间,而不停止计时器。
- 停止计时器,并从停止的地方继续(计时器)。
- 只有4个静态方法的简单API。
- 100%单元测试覆盖率。
- 以毫秒为单位获得精确时间(可选转换为秒)
- 用于序列化和其他用例的单独
Stopwatch
类。
先决条件
- PHP 7.2或更高版本。
安装
最简单的方法是使用composer进行安装。
composer require ayesh/php-timer
如果由于某些原因您无法使用Composer,或者不想使用(哎呀,别这样!),您可以通过将Ayesh\PHP_TIMER
命名空间映射到存储库的src
文件夹,将类与当前的PSR-4
自动加载器集成。
用法
使用计时器非常简单,所有方法都是静态的,并且只允许4种方法。
开始计时器
<?php use Ayesh\PHP_Timer\Timer; Timer::start();
这将在键default
上启动计时器(实际上存储当前时间)。在整个库中,如果您没有提供特定的键,则使用此默认键。
或者,您可以使用给定的键开始计时器
Timer::start('something');
一旦您使用给定的键启动了时间,您就可以使用相同的键来引用该特定的计时器。您当然可以使用PHP魔法常量来使事情更容易
Timer::start(__FUNCTION__);
尝试使用非字符串键启动计时器将抛出\TypeError
异常。即使计时器已启动,您也可以多次调用start
方法。它不会重置计时器。
读取计时器
启动计时器后,您可以在任何时候读取经过的时间。读取时间不会停止计时器。您可以读取计时器,进行一些昂贵的计算,然后再次读取以获取累积时间。
Timer::read(); // Default timer. Timer::read('default'); // Default timer. Timer::read('something'); // Timer started with key "something".
尝试读取未启动的计时器将抛出\LogicException
异常。
格式
您可以将第二个参数传递以让此库为您执行最小处理
Timer::read('something', Timer::FORMAT_PRECISE); // 0.10180473327637
有关支持的格式,请参阅下面的格式部分。
停止计时器
您也可以随时停止计时器。这将使库存储停止时间,并且您后续的Timer::read()
调用将始终返回开始和停止之间的时间。
Timer::stop(); // Default timer. Timer::stop('something'); // Timer started with key "something"
尝试停止未启动的计时器将抛出\LogicException
异常。
重置计时器
默认情况下,停止后启动计时器将从停止的地方继续。例如,如果您在停止时计时器上有3秒钟,再次启动它时,总时间将从头开始3秒钟。您可以通过显式重置计时器使其从0开始。重置计时器不会使计时器再次开始。您需要显式调用Timer::start()
来再次启动计时器。
Timer::reset(); // Default timer. Timer::reset('something'); Timer::resetAll(); // Resets all timers.
格式
目前提供以下格式
FORMAT_PRECISE
:精确计时器值,不进行舍入。例如0.10180473327637
FORMAT_MILLISECONDS
:以毫秒为单位的时间,四舍五入到两位小数。FORMAT_SECONDS
:以秒为单位的时间,四舍五入到三位小数。FORMAT_HUMAN
:可读时间格式,例如1.05分钟
。
示例
计算计时器一次性
<?php use Ayesh\PHP_Timer\Timer; Timer::start(); // do your processing here. $time = Timer::read('default', Timer::FORMAT_SECONDS); echo "Script took {$time} second(s)";
计时器功能,停止和开始计时器分别计算。
<?php use Ayesh\PHP_Timer\Timer; Timer::start('full'); Timer::start('laps'); sleep(1); Timer::stop('laps'); sleep(2); // This time is not calculated under 'laps' Timer::start('laps'); sleep(1); Timer::stop('laps'); echo Timer::read('full', Timer::FORMAT_SECONDS); // 4 seconds. echo "<br />"; echo Timer::read('laps', Timer::FORMAT_SECONDS); // 2 seconds (1 + 1)
开发和测试
欢迎所有问题的PR。包含Travis CI和PHPUnit测试。如果您正在添加新功能,请确保添加测试覆盖率。
致谢
谢谢再见