@dmitriyivvvv

JS тесты, как понять сколько времени нужно выполнять цикл?

В данный момент читаю книгу ydk JS async and performance 6 глава ссылка.
Автор говорит что для точности тестов лучше всего выполнять цикл не определенное колво итераций, а опред. колво времени зависящее от точности вашего таймера (Date.getTime()/Date.now() т.е через сколько секнунд обновляется отметка времени, например не каждую мс, а через каждые 15 мс), так вот он говорит что для таймера с точностью в 15 мс цикл следует выполнять 750 мс чтобы погрешность была менее 1% (т.е 15*50), а для таймера с точностью в 1 мс, цикл должен выполняться 50мс. И затем он говорит что это только один экземпляр и что надо их усреднить чтобы получить более точные данные. Т.е он имел ввиду что нужно сначала вычислить среднее арифметическое в рамках одного сэмпла, а потом еще раз но уже между самими сэмплами? И откуда берутся эти цифры (прод. цикла почему именно 750мс и 50мс и % погрешности)? желательно с примерами тестов.

сам фрагмент из книги
Actually, the length of time to repeat across should be based on the accuracy of the timer you're using, specifically to minimize the chances of inaccuracy. The less precise your timer, the longer you need to run to make sure you've minimized the error percentage. A 15ms timer is pretty bad for accurate benchmarking; to minimize its uncertainty (aka "error rate") to less than 1%, you need to run your each cycle of test iterations for 750ms. A 1ms timer only needs a cycle to run for 50ms to get the same confidence.

But then, that's just a single sample. To be sure you're factoring out the skew, you'll want lots of samples to average across. You'll also want to understand something about just how slow the worst sample is, how fast the best sample is, how far apart those best and worse cases were, and so on. You'll want to know not just a number that tells you how fast something ran, but also to have some quantifiable measure of how trustable that number is.
  • Вопрос задан
  • 51 просмотр
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы