【问题标题】:Benchmarking asynchronous vs synchronous code that throws an error对引发错误的异步代码和同步代码进行基准测试
【发布时间】:2016-07-31 20:18:50
【问题描述】:

我有两个功能;一个是异步的(testAsync),一个是同步的(testSync)。我正在尝试将它们与 benchmark.js 一起使用。哪个更快,多少。他们都应该抛出一个错误。

我很困惑我应该如何 a) 设置异步测试 b) 确保测试帐户为每个函数抛出错误。

这是我得到的:

import Benchmark from 'benchmark'
var suite = new Benchmark.Suite;

// add tests
suite.add('query validation test sync', function(deferred) {
  try {
    testSync({'name': 'reggi'});
  } catch (e) {
    deferred.resolve();
  }
})
.add('query validation test async', function(deferred) {
  testAsync({'name': 'reggi'}, {})
    .then(deferred.resolve)
    .catch(deferred.resolve);
})
// add listeners
.on('cycle', function(event) {
  console.log(String(event.target));
})
.on('error', function(event) {
  console.log(String(event.target));
})
.on('complete', function() {
  console.log('Fastest is ' + this.filter('fastest').map('name'));
})
// run async
.run({ 'async': true });

【问题讨论】:

    标签: javascript node.js asynchronous error-handling benchmark.js


    【解决方案1】:

    您应该指定defer: true 作为测试功能的选项:

    suite.add('query validation test sync', function() {
      try {
        testSync({'name': 'reggi'});
      } catch (e) {
        // it's sync code, you don't need use defer here
      }
    })
    .add('query validation test async', {
      defer: true,
      fn: function(deferred) {
        testAsync({'name': 'reggi'}, {})
          .then(deferred.resolve)
          .catch(deferred.resolve);
      }
    })
    ...
    

    benchmark.js 网站上的Check 示例(在部分中间)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-25
      • 1970-01-01
      相关资源
      最近更新 更多