Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.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、Node.js)_Javascript_Node.js_Asynchronous_Benchmark.js - Fatal编程技术网

Javascript 基准异步代码(Benchmark.js、Node.js)

Javascript 基准异步代码(Benchmark.js、Node.js),javascript,node.js,asynchronous,benchmark.js,Javascript,Node.js,Asynchronous,Benchmark.js,我想使用该模块测试node.js中编写的一些异步代码。具体来说,我想向两台服务器发出约10000个请求(一个用node编写,一个用PHP编写),并跟踪每台服务器完成所有请求所需的时间 我计划编写一个简单的节点脚本来使用基准测试激发这些请求,但对于如何将其用于异步代码,我有点困惑。通常在节点模块中,当异步代码完成时,或者从函数返回承诺时,您会调用某种回调。但是从我在文档中阅读的所有内容来看,基准测试似乎根本无法处理异步 有人知道我应该做什么或看什么吗?如果需要,我可以手动编写基准测试;这似乎是一个

我想使用该模块测试node.js中编写的一些异步代码。具体来说,我想向两台服务器发出约10000个请求(一个用node编写,一个用PHP编写),并跟踪每台服务器完成所有请求所需的时间

我计划编写一个简单的节点脚本来使用基准测试激发这些请求,但对于如何将其用于异步代码,我有点困惑。通常在节点模块中,当异步代码完成时,或者从函数返回承诺时,您会调用某种回调。但是从我在文档中阅读的所有内容来看,基准测试似乎根本无法处理异步

有人知道我应该做什么或看什么吗?如果需要,我可以手动编写基准测试;这似乎是一个足够常见的用例,Benchmark或其他人可能已经在他们的专业等级测试库中实现了它

谢谢你的指导,
~Nate

虽然没有很好的记录,但这里有一个PoC:

var Benchmark = require('benchmark');
var suite     = new Benchmark.Suite();

suite.add(new Benchmark('foo', {
  // a flag to indicate the benchmark is deferred
  defer : true,

  // benchmark test function
  fn : function(deferred) {
    setTimeout(function() {
      deferred.resolve();
    }, 200);
  }
})).on('complete', function() {
  console.log(this[0].stats);
}).run();
Benchmark.js v2稍微更改了语法:

var Benchmark = require('benchmark');
var suite = new Benchmark.Suite;

suite.add('foo', {
  defer: true,
  fn: function (deferred) {
    setTimeout(function() {
      deferred.resolve();
    }, 200);
  }
}).on('complete', function () {
  console.log(this[0].stats)
}).run()

我在尝试测试异步函数时遇到了同样的问题。下面是一个我最后在上使用的示例。下面是基准文档的示例,其中给出了使用
defer
属性的示例

下面是我在Node.js中使用的代码,适用于任何希望看到与
async/await
一起使用
defered
的人。我希望有人觉得这个有用

const Benchmark=require('Benchmark');
const suite=newbenchmark.suite();
const promisecont=10;
const setupArray=Array.from(Array(promiseCount)).map(((u,i)=>i);
常量睡眠=(毫秒=500)=>
新承诺(解决=>{
设置超时(()=>{
解决();
},ms);
});
常量异步函数=异步(名称、索引)=>{
等待睡眠(100);
返回`${name}{index}`;
};
一套
.add(“Promise.all”{
是的,
fn:异步函数(延迟){
const promiseArray=setupArray.map(异步函数);
等待承诺。全部(承诺人);
延迟。解决();
}
})
.add(“For循环”{
是的,
fn:异步函数(延迟){
常量final=[];
for(设i=0;i
哦,好吧-我确实看到了延迟对象;我不知道这是为什么。谢谢是的,就像我说的,没有很好的记录:-(FWIW,我刚刚推出了的第一个版本,它是Benchmark.js周围的一个类似Mocha的包装器,使事情变得更简单。不过它仍然是一个WIP。哦,太棒了-我喜欢Mocha,你的语法肯定非常熟悉。我来试试。benchr和bencha有什么区别?@opensourcejunkie AFAIK,
bencha
不支持端口异步测试用例。我也不喜欢它要求您创建
bench/
目录的方式,而且它也是不可配置的。明白了,谢谢。我昨天试过了,我也不喜欢配置选项(例如,它总是运行index.js而不是提供mocha--grep之类的东西)。它确实支持异步,风格与mocha相同-测试函数参数中指定的完成回调。感谢您的帮助,我期待在repo中看到您的解决方案!