Я написал Benchmark.js , который jsPerf использует.
"ops/sec
" означает количество операций в секунду.
Вот сколько раз тест будет выполняться за секунду.
Тест выполняется многократно, пока не достигнет минимального времени, необходимого для получения процентной неопределенности для измерения, меньшего или равного 1%
. Количество итераций зависит от разрешения таймера среды и от того, сколько раз тест может выполняться за минимальное время выполнения. Мы собираем выполненные тестовые прогоны в течение 5
секунд (настраивается) или, по крайней мере, 5
выполняется (также настраивается) , а затем выполняем статистический анализ выборки. Таким образом, тест может повторяться 100,000
раза за 50 ms
(минимальное время выполнения для большинства сред) , а затем повторяться 100
раз больше (5
секунд) . Больший размер выборки (в данном примере 100
) приводит к уменьшению погрешности .
Мы принимаем решение о том, какой тест выполняется быстрее, чем просто операции в секунду, также учитывая погрешность. Например, тест с меньшим числом операций в секунду, но с более высоким пределом погрешности может быть статистически неотличимым из теста с более высоким числом операций в секунду и меньшим пределом погрешности.
Мы использовали Уэлч-t-тест , аналогичный тому, что SunSpider использует, но переключился на непарный 2-образный t-тест для равной дисперсии (дисперсия очень мала) , поскольку у t-теста Уэлча возникли проблемы при сравнении более низких операций / сек и более высоких операций / сек с небольшими отклонениями, из-за которых степеней свободы были вычислены как меньшие чем 1
. Мы также добавляем допуск 5.5%
для тестов с аналогичными операциями в секунду, поскольку тестирование в реальных условиях показало, что идентичные тесты могут проходить ~ 5%
от теста к повторному тестированию. T-тесты используются для проверки того, что различия между тестами статистически значимы .