Как работает jsPerf?

Сегодня я посетил jsPerf и теперь мне интересно...

  1. Что такое "ops / sec"?
  2. Сколько итераций это делает?
  3. На каком основании он рассчитывает, что быстрее? Какова формула этих расчетов?

Пример: http://jsperf.com/concatenation-vs-join

Кто-нибудь может сказать мне?

Заранее спасибо.

2 ответа

Решение

Я написал Benchmark.js, который использует jsPerf.

  1. " ops/sec "обозначает операции в секунду. То есть, сколько раз тест должен выполнить в секунду.

  2. Тест выполняется многократно, пока не достигнет минимального времени, необходимого для получения процентной неопределенности для измерения, меньшей или равной 1%, Количество итераций будет варьироваться в зависимости от разрешения таймера среды и от того, сколько раз тест может выполняться за минимальное время выполнения. Мы собираем завершенные тестовые прогоны для 5 секунд (настраивается) или хотя бы 5 выполняется (также настраивается), а затем выполнить статистический анализ выборки. Итак, тест может быть повторен 100,000 раз в 50 ms (минимальное время выполнения для большинства сред), а затем повторяется 100 раз больше ( 5 секунд). Больший размер выборки (в этом примере 100), приводит к меньшей погрешности.

  3. Мы основываем решение о том, какой тест быстрее, чем просто опс / сек, а также учитываем предел погрешности. Например, тест с меньшим числом операций в секунду, но с более высоким пределом погрешности может быть статистически неотличим от теста с большим числом операций в секунду и меньшим пределом погрешности.

    Мы использовали t-тест Уэлча, аналогичный тому, который использует SunSpider, но переключились на непарный t-тест с 2 выборками для равной дисперсии (дисперсия очень мала), потому что у t-теста Уэлча были проблемы при сравнении более низких операций / сек и выше ops / sec с небольшими отклонениями, из- за которых вычисляются степени свободы меньше 1, Мы также добавляем 5.5% допуск на тесты с аналогичными операциями / сек, потому что тестирование в реальном мире показало, что идентичные тесты могут качаться ~ 5% от испытания к повторному испытанию. T-тесты используются для проверки того, что различия между тестами являются статистически значимыми.

Вы можете прочитать статью Bulletproof JavaScript. От авторов. Он использует Benchmark.js, кстати, с открытым исходным кодом.

Другие вопросы по тегам