我正在尝试使用Benchmark.js执行示例性能基准测试。
这是我写的:

var Benchmark = require('benchmark');
var arr = []
benchmark = new Benchmark('testPerf',function(){
    arr.push(1000);
},
{
    delay: 0,
    initCount: 1,
    minSamples: 1000,
    onComplete : function(){ console.log(this);},
    onCycle: function(){}
});
benchmark.run();

现在就像我们在JUnitBenchmarks中所做的那样:
@BenchmarkOptions(clock = Clock.NANO_TIME, callgc = true, benchmarkRounds = 10, warmupRounds = 1)

在这里我也想在Benchmark.js中声明benchmarkRoundswarmupRounds计数。我认为warmupRounds映射到initCount吗?以及如何设置准确的循环次数/基准迭代次数?

或者,如果我们还有其他可以处理它的优秀JavaScript库也可以工作。

最佳答案

随着浏览器变得越来越快,在JavaScript基准测试中使用固定的迭代计数是有风险的:we might get zero-time results eventually

Benchmark.js不允许提前设置回合/迭代次数。相反,它会一遍又一遍地运行测试,直到可以认为结果相当准确为止。您应该 checkout code reading by Monsur Hossain。文章中的一些要点:

  • Benchmark.js中的一个循环包括实际测试的设置,拆卸和多次迭代。
  • Benchmark.js从分析阶段开始:运行几个循环以找到最佳的迭代次数(在收集足够的样本以产生准确结果的同时,尽快完成测试)。
  • 分析期间运行的循环数保存在 Benchmark.prototype.cycles 中。
  • Benchmark.js知道了最佳的迭代次数,就开始了采样阶段:运行测试并实际存储结果。
  • Benchmark.prototype.stats.sample 是采样期间每个周期的结果数组。
  • Benchmark.prototype.count 是采样期间的迭代次数。
  • 09-11 10:23