dragon-code/runtime-comparison

该包已被弃用且不再维护。作者建议使用 dragon-code/benchmark 包代替。

不同选项之间代码执行速度的简单比较

v1.5.1 2023-02-04 17:44 UTC

This package is auto-updated.

Last update: 2023-02-06 13:37:48 UTC


README

the dragon code benchmark

Stable Version Unstable Version Total Downloads Github Workflow Status License

安装

要获取 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 许可证 许可。