每次运行我的基准测试代码时(不仅仅是每个周期)如何获取Benchmark.js进行设置/拆卸?

我正在尝试使用Benchmark.js对对象的成员函数进行基准测试。几个因素使测试功能变得困难:

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

让我们说它看起来像这样:

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选项吗?还是我处理方法不正确?

回答如下:

每次运行我的基准测试代码时(不仅仅是每个周期)如何获取Benchmark.js进行设置/拆卸?

我正在尝试使用Benchmark.js对对象的成员函数进行基准测试。几个因素使测试功能变得困难:

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

让我们说它看起来像这样:

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选项吗?还是我处理方法不正确?

回答如下: