Как работает jsPerf?
Сегодня я посетил jsPerf и теперь мне интересно...
- Что такое "ops / sec"?
- Сколько итераций это делает?
- На каком основании он рассчитывает, что быстрее? Какова формула этих расчетов?
Пример: http://jsperf.com/concatenation-vs-join
Кто-нибудь может сказать мне?
Заранее спасибо.
2 ответа
Я написал Benchmark.js, который использует jsPerf.
"
ops/sec
"обозначает операции в секунду. То есть, сколько раз тест должен выполнить в секунду.Тест выполняется многократно, пока не достигнет минимального времени, необходимого для получения процентной неопределенности для измерения, меньшей или равной
1%
, Количество итераций будет варьироваться в зависимости от разрешения таймера среды и от того, сколько раз тест может выполняться за минимальное время выполнения. Мы собираем завершенные тестовые прогоны для5
секунд (настраивается) или хотя бы5
выполняется (также настраивается), а затем выполнить статистический анализ выборки. Итак, тест может быть повторен100,000
раз в50 ms
(минимальное время выполнения для большинства сред), а затем повторяется100
раз больше (5
секунд). Больший размер выборки (в этом примере100
), приводит к меньшей погрешности.Мы основываем решение о том, какой тест быстрее, чем просто опс / сек, а также учитываем предел погрешности. Например, тест с меньшим числом операций в секунду, но с более высоким пределом погрешности может быть статистически неотличим от теста с большим числом операций в секунду и меньшим пределом погрешности.
Мы использовали t-тест Уэлча, аналогичный тому, который использует SunSpider, но переключились на непарный t-тест с 2 выборками для равной дисперсии (дисперсия очень мала), потому что у t-теста Уэлча были проблемы при сравнении более низких операций / сек и выше ops / sec с небольшими отклонениями, из- за которых вычисляются степени свободы меньше
1
, Мы также добавляем5.5%
допуск на тесты с аналогичными операциями / сек, потому что тестирование в реальном мире показало, что идентичные тесты могут качаться ~5%
от испытания к повторному испытанию. T-тесты используются для проверки того, что различия между тестами являются статистически значимыми.
Вы можете прочитать статью Bulletproof JavaScript. От авторов. Он использует Benchmark.js, кстати, с открытым исходным кодом.