Как повысить точность для отдельных тестов в benchmark.js
У меня есть jsfiddle, где я пытаюсь измерить производительность для какой-то интересующей меня операции, и я постоянно получаю разную точность для отдельных тестов. Например вот мой последний запуск:
using extra assign x 662 ops/sec ±9.20% (57 runs sampled)
using no extra assign x 694 ops/sec ±4.31% (47 runs sampled)
Fastest run(s) is(are): "using no extra assign,using extra assign"
Трудно измерить результаты с разной точностью, которая в некоторых случаях может достигать ±30.0%
и поэтому я хотел бы иметь возможность установить приемлемую границу для точности.
Я пытался настроить параметры, но они, кажется, не влияют ни на что, или я делаю что-то не так. Что я делаю неправильно?
Заранее спасибо!
1 ответ
Добавление minSamples
Опция для каждого теста и установка его на более высокий уровень заставит benchmark.js взять больше образцов для каждого теста. Наличие большего набора выборок должно уменьшить предел погрешности (MOE). Поиграйте с размером выборки, чтобы определить желаемый баланс между точностью и продолжительностью теста.
Это пример использования кода, который вы указали в jsfiddle:
suite
.add('using extra assign', test1, { minSamples: 200 })
.add('using no extra assign', test2, { minSamples: 200 })
Из этих изменений получаются следующие результаты:
using extra assign x 642 ops/sec ±0.74% (240 runs sampled)
using no extra assign x 637 ops/sec ±0.44% (258 runs sampled)
Fastest run(s) is(are): "using extra assign"
Вы получите высокий уровень дисперсии, если вы используете компьютер для других дел во время выполнения теста. Чтобы убедиться в этом, запустите тест дважды: в первый раз, когда он работает, просматривайте веб-страницы, перетаскивайте окна графического интерфейса, компилируйте код. Во второй раз закройте все приложения, которые используют значительные циклы ЦП, запустите тест, а затем выключите компьютер, пока он не будет завершен. Вы увидите огромную разницу.
Еще нужно запустить тест с более высоким приоритетом. На машинах на базе Unix/Linux= используйтеnice
. Например, на моем компьютере с macOS я запускаю:
nice -10 node comparativeBench.js