Сравнительный анализ асинхронного и синхронного кода, который выдает ошибку

У меня есть две функции; один асинхронный (testAsync) и один синхронизируется (testSync). Я пытаюсь использовать их с benchmark.js. Какой из них быстрее и на сколько. Они оба должны выбросить ошибку.

Я запутался в том, как я должен: а) настроить асинхронный тест, б) убедиться, что тестовые аккаунты выдают ошибку для каждой функции.

Вот что я получил:

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 });

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 (в середине раздела)

Другие вопросы по тегам