Как добавить настройки и демонтаж для каждого теста в benchmark.js

Я новичок в использовании benchmark.js, документация немного раздражает, и я не могу найти много примеров, может кто-нибудь подтвердить, если мой код правильный, извините, я не могу поделиться всем кодом (политика компании).

рассматривать setText(choice); как некоторые операции, и я хочу сравнить различные варианты. (функция отлично работает независимо, я проверил это). Хотя я настраиваю функцию настройки и удаления, я не уверен, что настройка верна, я хочу, чтобы они запускались до и после каждого запуска setText(choice);

с помощью console.log Я обнаружил, что они запускаются только один раз на каждые 200 раз setText(choice);Я хочу, чтобы они работали каждый раз.

Кроме того, как я могу получить операции / сек для каждой операции по завершении набора. Вы можете найти код, связанный с моим набором тестов, ниже.

var suite = new Benchmark.Suite;
suite.add('innerText', function() {
    setText('innerText');
}, {'setup':setup,'teardown':teardown})
.add('innerHTML', function() {
    setText('innerHTML');
}, {'setup':setup,'teardown':teardown})
.add('textContent', function() {
    setText('textContent');
}, {'setup':setup,'teardown':teardown})
.on('cycle', function(event, bench) {
  log(String(bench));
}).on('complete', function() {
  log('Fastest is ' + JSON.stringify(this));
}).run(false);

1 ответ

Решение

Я также новичок в benchmarkjs и надеюсь, что смогу ответить правильно.

http://monsur.hossa.in/2012/12/11/benchmarkjs.html

Если вы прочитаете вышеупомянутую статью, вы обнаружите, что эталонный тест войдет в фазу анализа и отбора проб.

Он будет выполнять несколько итераций (то есть "тестовый цикл"), которые выполняли setText на этапе выборки без вызова setup или же teardown,

Таким образом, я предполагаю, что настройка и разборка - это то, что вы делаете перед входом в тестовый цикл, а не точно для каждого теста. Вы не можете получить более детальный, чем тестовый цикл

Вы можете получить менее детальный, чем тестовый цикл; вы можете прослушивать события всего Benchmark (против уровня набора или уровня цикла тестирования). Второй вопрос о каждой операции по завершению комплекта, вы можете получить его по завершению события

.on('complete', function(event) {
    //will log out the array of benchmark.suite, you can get it from each benchmark suite.
    //e.g event.currentTarget[0].hz which retrieve the operation/s. for the first one.
    console.log(event.currentTarget);
    //equivalent of above; event.currentTarget===this; both are Benchmark.suite.
    console.log(this); 
})
Другие вопросы по тегам