Javascript 定义周期数-Benchmark.js
我正在尝试使用benchmark.js执行一个示例性能基准测试。 以下是我写的:Javascript 定义周期数-Benchmark.js,javascript,benchmark.js,Javascript,Benchmark.js,我正在尝试使用benchmark.js执行一个示例性能基准测试。 以下是我写的: var Benchmark = require('benchmark'); var arr = [] benchmark = new Benchmark('testPerf',function(){ arr.push(1000); }, { delay: 0, initCount: 1, minSamples: 1000, onComplete : function(){ c
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)
这里我还要声明benchmarkhards
和warmupRounds
在benchmarkjs中的计数。我认为warmupRounds
映射到initCount
?以及如何设置周期/基准迭代的确切数量
或者,如果我们有其他好的JavaScript库可以处理它,它也会工作。查看以下文档: 听起来你是对的
在JavaScript基准测试中使用固定的迭代次数是有风险的,因为浏览器变得更快 Benchmark.js不允许预先设置轮数/迭代次数。相反,它会一次又一次地运行测试,直到结果被认为相当准确。你应该去看看报纸。文章中的一些亮点:
- 在Benchmark.js中,一个周期包括实际测试的设置、拆卸和多次迭代
- Benchmark.js从分析阶段开始:运行几个周期以找到最佳迭代次数(在收集足够样本以生成准确结果的同时尽快完成测试)
- 分析期间运行的循环数保存在中
- 知道最佳迭代次数后,Benchmark.js开始采样阶段:运行测试并实际存储结果
- 是采样期间每个循环的结果数组
- 是采样期间的迭代次数
minTime
和maxTime
设置为一些负值,那么minSamples
和initCount
将作为唯一的标准,它们将对应于每个周期运行的#循环和预热迭代。因此,测试函数将执行(initCount
+1)*minSamples
次。至少我的实验证明了这一点
var Benchmark = require('benchmark');
var counter = 0;
Benchmark('counting', {
'fn': function() { ++counter; },
minSamples: 3,
initCount: 1,
minTime: -Infinity,
maxTime: -Infinity,
onCycle: function () { console.log('[onCycle] counter: ' + counter); },
onComplete : function(){ console.log('mean: ' + this.stats.mean);},
}).run();
为我提供了benchmark.js 2.1.0:
$ node count.js
[onCycle] counter: 2
[onCycle] counter: 4
[onCycle] counter: 6
mean: 0.0000034683333333333333
一个周期包括测试的设置、拆卸和多次迭代。一个周期并不是测试的一个单一迭代,在中似乎就是这样。周期并不像预期的那样工作。我已经定义了
循环
:10,但函数执行了73次。看起来@approxiblue在JavaScript中使用固定的迭代计数进行基准测试是正确的,所以Benchmark.js不允许该选项。相反,它会一次又一次地运行测试。@ApproxValue请将此评论作为答案发布。