9 个版本
0.2.6 | 2021年12月19日 |
---|---|
0.2.5 | 2021年12月18日 |
0.1.1 | 2021年12月16日 |
#1010 in 开发工具
每月 47 次下载
用于 node-workers
10KB
200 代码行
benchman
功能
- 专注于单次基准测试
- RAII 风格
- 统计信息(平均值、中位数、95% 和 99% 分位数)
- 彩色输出
- 标签
- 嵌套
动机
我认为基准测试有两种类型。
一种是我们想要从一百万次迭代中获得统计信息的,针对小而快的函数的基准测试。对于这种类型的基准测试,Criterion.rs 是一个好的选择。
另一种类型是我所说的单次基准测试。
你可能想编写一个像这样的基准测试程序。
let mut db = DB::new();
let t = Instant::now();
db.write(...);
println!("write: {:?}", t.elapsed());
let t = Instant::now();
db.read(...);
println!("read: {:?}", t.elapsed());
根据 Criterion.rs #531,由于 Criterion 专注于第一种类型,这种类型的基准测试在 Criterion.rs 中是不可行的。
这就是我为什么开始创建 benchman 的原因。
RAII 风格测量
RAII 是一种很好的资源访问管理技术。我设计 benchman 的想法是,计时器就像是一种资源,因为它像一个向单一中央消费者发送基准测试结果的产生者,并且有一个严格的规则,即计时器不应该发送结果两次。
基于这个想法,库被设计成这样。
let stopwatch = benchman.get_stopwatch("some_tag");
do_something();
drop(stopwatch);
// or
{
let _sw = benchman.get_stopwatch("some_tag");
do_something();
}
当计时器被丢弃时,测量结果会被发送到中央数据库。
截图
作者
Akira Hayakawa (@akiradeveloper)
依赖
~1–11MB
~73K SLoC