ayesh/php-timer

高精度且单调的计时器,满足您的所有需求。支持计时器开始、暂停、恢复、停止、读取和最小转换。

v2.2.0 2020-12-18 11:37 UTC

This package is auto-updated.

Last update: 2024-09-18 20:09:56 UTC


README

Latest Stable Version License Scrutinizer Code Quality CI codecov SensioLabsInsight Too many badges

摘要

一个帮助类,用于计算特定任务所需时间。

此类类似于 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测试。如果您正在添加新功能,请确保添加测试覆盖率。

致谢

Ayesh Karunaratne贡献者

谢谢再见