如何在benchmark.js中为每个测试添加设置和拆卸

时间:2014-11-06 08:56:13

标签: javascript benchmark.js

我是使用benchmark.js的新手,文档有点刺耳,并且无法找到很多示例,任何人都可以确认我的代码是否正确,抱歉我无法共享整个代码(公司政策)。

setText(choice);视为一些操作,我想比较各种选择。 (该功能独立工作,我已经验证了它)。虽然我正在设置设置和拆卸功能,但我不确定设置是否正确,我希望它们在每次运行setText(choice);之前和之后运行

使用console.log,我发现它们每200次setText(choice);只运行一次,我希望它们每次都运行。

另外,如何在套件完成时检索每个操作的操作/秒。您可以在下面找到我的基准套件相关代码。

var suite = new Benchmark.Suite;
suite.add('innerText', function() {
    setText('innerText');
}, {'setup':setup,'teardown':teardown})
.add('innerHTML', function() {
    setText('innerHTML');
}, {'setup':setup,'teardown':teardown})
.add('textContent', function() {
    setText('textContent');
}, {'setup':setup,'teardown':teardown})
.on('cycle', function(event, bench) {
  log(String(bench));
}).on('complete', function() {
  log('Fastest is ' + JSON.stringify(this));
}).run(false);

1 个答案:

答案 0 :(得分:3)

我也是基准测试新手,希望我能正确回答。

http://monsur.hossa.in/2012/12/11/benchmarkjs.html

如果您阅读上述文章,您会发现基准测试将进入分析和采样阶段。

它将运行多次迭代(即“测试循环”),它在采样阶段执行setText而不调用setupteardown

所以我猜设置和拆解只是针对您在进入测试循环之前所做的事情而且并非完全适用于每个测试。您无法获得比测试更精细的内容 - 环

您可以比测试循环获得更少粒度;您可以在整个Benchmark (在套件级别或测试循环级别)上侦听事件。关于完成套件的每个操作的第二个问题,您可以从完整的事件

获得它
.on('complete', function(event) {
    //will log out the array of benchmark.suite, you can get it from each benchmark suite.
    //e.g event.currentTarget[0].hz which retrieve the operation/s. for the first one.
    console.log(event.currentTarget);
    //equivalent of above; event.currentTarget===this; both are Benchmark.suite.
    console.log(this); 
})