首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基准异步代码(Benchmark.js,Node.js)

基准异步代码(Benchmark.js,Node.js)
EN

Stack Overflow用户
提问于 2015-07-25 07:24:22
回答 2查看 6.6K关注 0票数 14

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

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

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

谢谢你的指导~内特

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-25 08:13:01

这不是很好的文档,但是这里有一个PoC:

代码语言:javascript
复制
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稍微改变了语法:

代码语言:javascript
复制
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()
票数 15
EN

Stack Overflow用户

发布于 2019-11-26 22:49:39

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

下面是我在Node.js中为任何想要看到defferedasync/await一起使用的人使用的代码。我希望有人发现这有用!

代码语言:javascript
复制
const Benchmark = require('benchmark');
const suite = new Benchmark.Suite();
const promiseCount = 10;
const setupArray = Array.from(Array(promiseCount)).map((_, i) => i);

const sleep = (ms = 500) =>
  new Promise(resolve => {
    setTimeout(() => {
      resolve();
    }, ms);
  });

const asyncFunction = async (name, index) => {
  await sleep(100);
  return `${name}_${index}`;
};

suite
  .add("Promise.all", {
    defer: true,
    fn: async function(deferred) {
      const promiseArray = setupArray.map(asyncFunction);
      await Promise.all(promiseArray);
      deferred.resolve();
    }
  })
  .add("For loop", {
    defer: true,
    fn: async function(deferred) {
      const final = [];

      for (let i = 0; i < promiseCount; i++) {
        const data = await asyncFunction(setupArray[i], i);
        final.push(data);
      }
      deferred.resolve();
    }
  })
  .on("cycle", function(event) {
    console.log(String(event.target));
  })
  .on("complete", function() {
    console.log("Fastest is " + this.filter("fastest").map("name"));
  })
  .run({ async: true });
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31624055

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档