? Вы не всегда можете получить то, что хотите ... ♩
Бенчмарк. js не выполняет setup
/ teardown
за итерацию вашей функции, но только для каждой benchmark. js cycle
, что обычно составляет всего 5 секунд, что может составлять от сотен до тысяч или миллионов вызовов. Это делается по очень веской причине, как объясняют авторы Benchmark. js в Bulletproof JavaScript тестах .
Если вы считаете, что эти причины к вам не относятся, тогда я спросил бы, почему вы даже используете Benchmark. js. Вы можете легко написать oop и измерить длительность каждого звонка и взять среднее значение самостоятельно, используя несколько строк кода. Вам не нужна необычная библиотека.
Вы не всегда можете получить то, что хотите
И если вы попробуете когда-нибудь, вы можете найти
Вы получаете ♫, что вам нужно. 10 ♪
Если честно, да, вы подходите к этому неправильно. Ваш expensiveOperation ()
разработан, чтобы быть эффективным для всех последующих вызовов, поэтому, конечно, хороший тест должен отражать это. Стоимость первого звонка амортизируется по всем последующим звонкам. Бенчмарк. js попытается измерить эффективность вашего метода , как задумано . В этом суть.
Подумайте о своей основной цели и о том, почему вы хотите сбрасывать ее для каждой итерации. Вы не хотите тестировать expensiveOperation ()
, а только эту часть метода:
// Do expensive operation
this.expensiveValue = result; // a non-null value
Так просто разложите это в метод или функцию и сравните это. :)