Билдер бенчмарков
Бесплатный онлайн-билдер JS-бенчмарков, не требует установки. Сравнение скорости выполнения JavaScript-кода.
О Benchmark Builder
Инструмент прямого сравнения JavaScript-микробенчмарков: вставьте два тела функций (Snippet A и Snippet B), задайте количество итераций, и инструмент выполнит каждое из них через 100 разогревающих вызовов, а затем через заданное число измеряемых вызовов, после чего сообщит общее время, операции в секунду, а также о том, какой сниппет был быстрее и во сколько раз.
Как использовать
1. Задайте Итерации (по умолчанию 10000) в верхней карточке. 2. В карточке Snippet A введите необязательную метку (по умолчанию "A") и тело функции для бенчмарка (например, `return Math.random()`). 3. Сделайте то же для Snippet B (например, `return crypto.getRandomValues(new Uint32Array(1))[0]`). 4. Нажмите Запустить — кнопка отключена, пока оба тела сниппетов не заполнены. 5. Прочитайте карточку результата: каждый сниппет показывает общее время в миллисекундах и операции/секунду, а также строку подвала, указывающую более быстрый сниппет и коэффициент скорости. Если сниппет выбрасывает исключение, ошибка отображается красным.
Модель выполнения и метрики
Каждый сниппет оборачивается в `new Function(code)` и вызывается как функция без аргументов, поэтому он должен быть корректным телом функции (используйте `return ...` для работы; инструкции верхнего уровня допускаются). - Разогрев: 100 безусловных вызовов перед замером, чтобы движок JS мог оптимизировать. - Измерение: `performance.now()` берётся до и после выполнения сниппета `iterations` раз в плотном цикле. - Операции в секунду: вычисляются как `iterations / (timeMs / 1000)`, округляются. - Коэффициент: `max(timeA, timeB) / min(timeA, timeB)`, отображается с 2 знаками после запятой; сниппет с меньшим временем сообщается как более быстрый. Обратите внимание, что это микробенчмарк в браузере, сделанный по мере возможностей, а не статистически строгий набор: результаты меняются в зависимости от нагрузки на машину, движка браузера, пауз GC и удаления мёртвого кода.
▶Почему мои результаты отличаются при каждом нажатии «Запустить»?
▶Могут ли сниппеты получать доступ к переменным, импортам или async/await?
▶Что происходит, если сниппет выбрасывает исключение?
▶Отправляются ли мои данные на сервер?
Если этот инструмент оказался полезным для вас, подумайте о том, чтобы подарить мне кофе.
Купите мне кофе.