dragon-code / runtime-comparison
v1.5.1
2023-02-04 17:44 UTC
Requires
- php: ^8.1
- symfony/console: ^5.3 || ^6.0
Requires (Dev)
- phpunit/phpunit: ^10.0
- symfony/var-dumper: ^5.3 || ^6.0
README
安装
要获取 The Dragon Code: Benchmark
的最新版本,只需使用 Composer 引入项目即可
composer require dragon-code/benchmark --dev
或者手动更新 composer.json
中的 require-dev
块,并运行 composer update
命令
{ "require-dev": { "dragon-code/benchmark": "^1.0" } }
使用
注意
执行结果将打印到控制台,因此请确保您从控制台调用代码。
use DragonCode\Benchmark\Benchmark; (new Benchmark())->compare( fn () => /* some code */, fn () => /* some code */, ); (new Benchmark())->compare([ fn () => /* some code */, fn () => /* some code */, ]); (new Benchmark())->compare([ 'foo' => fn () => /* some code */, 'bar' => fn () => /* some code */, ]);
结果示例
------- ------------- -------------
# 0 1
------- ------------- -------------
1 11.3845 ms 15.565 ms
2 14.92 ms 14.8241 ms
3 14.812 ms 15.2948 ms
4 15.3211 ms 14.9243 ms
5 15.045 ms 15.4147 ms
6 15.3918 ms 15.1484 ms
7 14.6678 ms 14.0797 ms
8 14.7602 ms 14.613 ms
9 14.9372 ms 15.6712 ms
...
100 15.2036 ms 14.6706 ms
------- ------------- -------------
min 11.3845 ms 14.0797 ms
max 15.3918 ms 15.6712 ms
avg 14.64432 ms 15.02058 ms
------- ------------- -------------
Order - 1 - - 2 -
------- ------------- -------------
在测量结果中的平均值时,当迭代次数超过10次时,最终数据将通过峰值值进行过滤。排除总结果中的10%最低和10%最高值,因此最终数据变得更加干净且对任何外部因素依赖性更小。
迭代次数
默认情况下,基准测试每个回调执行100次迭代,但您可以通过调用 iterations
方法更改此数字
use DragonCode\Benchmark\Benchmark; (new Benchmark()) ->iterations(5) ->compare( fn () => /* some code */, fn () => /* some code */, );
如果传入的值小于1,则每个回调将执行一次迭代。
无数据
如果您只想查看运行时间的总结结果而不显示每个迭代的详细信息,则可以调用 withoutData
方法,这将只显示总结信息
use DragonCode\Benchmark\Benchmark; (new Benchmark()) ->withoutData() ->compare([ 'foo' => fn () => /* some code */, 'bar' => fn () => /* some code */, ]);
结果示例
------- ------------- -------------
# foo bar
------- ------------- -------------
min 11.3845 ms 14.0797 ms
max 15.3918 ms 15.6712 ms
avg 14.64432 ms 15.02058 ms
------- ------------- -------------
Order - 1 - - 2 -
------- ------------- -------------
注意
如果启用显示详细信息的选项(未使用
withoutData
方法)并且请求的迭代次数超过1000次,则将强制禁用详细信息的输出,因为在这种情况下,它将毫无意义,并且会显著增加计算机的负载。
舍入精度
默认情况下,脚本不对测量结果进行舍入,但您可以指定可以进行舍入的十进制位数。
例如
use DragonCode\Benchmark\Benchmark; (new Benchmark()) ->iterations(5) ->round(2) ->compare( fn () => /* some code */, fn () => /* some code */, );
结果示例
------- ---------- ----------
# 0 1
------- ---------- ----------
1 12.22 ms 14.65 ms
2 14.54 ms 15.37 ms
3 15.26 ms 14.37 ms
4 15.07 ms 14.73 ms
5 14.67 ms 14.74 ms
------- ---------- ----------
min 12.22 ms 14.37 ms
max 15.26 ms 15.37 ms
avg 14.35 ms 14.77 ms
------- ---------- ----------
Order - 1 - - 2 -
------- ---------- ----------
许可
此包根据 MIT 许可证 许可。