首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何让Benchmark.js在每次运行基准测试代码(而不仅仅是每个周期)时进行安装/删除?

如何让Benchmark.js在每次运行基准测试代码(而不仅仅是每个周期)时进行安装/删除?
EN

Stack Overflow用户
提问于 2020-01-29 16:54:47
回答 2查看 366关注 0票数 1

我正在尝试使用Benchmark.js对对象的成员函数进行基准测试。由于以下几个因素,测试该功能很困难:

  • 对象的创建是异步的(我可以模拟该部分)
  • 成员函数很昂贵。
  • 成员函数足够聪明,只能运行一次。

假设它看起来是这样的:

代码语言:javascript
复制
class Something {

  constructor(){
    // async ops
    this.expensiveValue = null;
  }

  expensiveOperation () {

    if (this.expensiveValue === null) {
      // Do expensive operation
      this.expensiveValue = result; // a non-null value
    }

  }

}

现在,我想对expensiveOperation进行基准测试。但是由于它的局限性,我也需要“重置”每次运行的对象。

据我所知,benchmark不支持每次运行的设置。我觉得让重置部分的运行也不是最好的做法,因为它污染了我真正想要的基准。

我看过Benchmark.setup,但它只在每一个周期执行,而不是每次运行。

我是不是遗漏了什么?我还可以使用另一个benchmark选项吗?还是我走错路了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-29 05:20:22

你不能总是得到你想要的..。♩

Benchmark.js不会在函数的每一次迭代中执行setup/teardown,而是只对每个benchmark.js setup执行,这通常是它可以在5秒内运行的任何东西,这可能是几百到数百万次调用。它这样做是有很好的理由的,正如“Benchmark.js in 防弹JavaScript基准”的作者所解释的。

如果你认为这些理由不适用于你,那么我会问你为什么要使用Benchmark.js。您可以轻松地编写一个循环,并测量每个调用的持续时间,并在少量代码行中自己计算平均值。你不需要一个漂亮的图书馆。

你不能总是得到你想要的

如果你有时间尝试,你可能会发现

你得到了你所需要的♫。*♬♪

老实说,是的,你这样做是不对的。您的expensiveOperation ()被设计成对所有后续调用都是有效的,因此当然,一个好的基准应该反映这一点。第一次呼叫的费用在随后的所有呼叫中摊销。Benchmark.js将尝试按照设计来衡量您的方法的效率。这就是问题所在。

想想你的潜在目标,以及为什么你想要为每一次迭代重置。您不想对expensiveOperation ()进行基准测试,但是只想对该方法的这一部分进行测试:

代码语言:javascript
复制
      // Do expensive operation
      this.expensiveValue = result; // a non-null value

因此,只需将其考虑到一个方法或函数中,并对其进行基准测试。:)

票数 2
EN

Stack Overflow用户

发布于 2020-02-03 22:00:41

我不会接受这个答案,因为我在这个问题上没有足够的知识,不能百分之百肯定,但我确实想分享我的发现。如果这应该转移到我的问题或评论,只需给我一个评论。

我认为这不可能的原因是因为Benchmark.js如何执行它的计时。

根据我所读到的(在文本和代码中),Benchmark并不是单个运行的时间和总和,而是计算在指定的时间内完成了多少次运行(默认为5秒)。这避免了某些问题,如低精度计时器/时间戳、运行时优化和浮点舍入错误。

因此,由于这些原因,它不能简单地减去执行每次运行的安装函数所需的时间。它也不能暂停其计时器以允许每次运行的安装程序执行。

由于这些原因,Benchmark.js似乎不支持每次运行的安装函数,因为这样做会给它的工作带来太多麻烦,降低计时的准确性。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59971998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档