Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 定义周期数-Benchmark.js_Javascript_Benchmark.js - Fatal编程技术网

Javascript 定义周期数-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

我正在尝试使用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)
这里我还要声明
benchmarkhards
warmupRounds
在benchmarkjs中的计数。我认为
warmupRounds
映射到
initCount
?以及如何设置周期/基准迭代的确切数量


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

查看以下文档:

听起来你是对的

  • warmupRounds=>initCount()
  • 周期=>

  • 在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请将此评论作为答案发布。