9 个版本

0.2.6 2021年12月19日
0.2.5 2021年12月18日
0.1.1 2021年12月16日

#1010 in 开发工具

每月 47 次下载
用于 node-workers

MIT 许可证

10KB
200 代码行

benchman

Crates.io documentation

功能

  • 专注于单次基准测试
  • 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();
}

当计时器被丢弃时,测量结果会被发送到中央数据库。

截图

スクリーンショット 2021-12-18 12 42 40

作者

Akira Hayakawa (@akiradeveloper)

依赖

~1–11MB
~73K SLoC