Сравнительный анализ асинхронного и синхронного кода, который выдает ошибку
У меня есть две функции; один асинхронный (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 (в середине раздела)