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

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

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

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

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

Спасибо заранее.

Ответ 1

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

  • "ops/sec" означает операции в секунду. Это то, сколько раз тест проецируется на выполнение через секунду.

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

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

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