Конструктор бенчмарков

Вставьте сырые замеры времени для нескольких реализаций и получите среднее, медиану, стандартное отклонение, мин., макс. и относительную скорость в одной таблице сравнения, плюс версию в Markdown для вставки куда угодно.

Превратите кучу замеров в таблицу сравнения. Одна серия на строку, метка, двоеточие, затем ваши сырые измерения. Он вычисляет привычную статистику, ранжирует всё относительно самого быстрого и даёт вам таблицу Markdown для pull-request.

Одна серия на строку в виде «имя: значение, значение, значение». Запятые, точки с запятой или пробелы — все работают как разделители.

Серия Прогоны Среднее Медиана Стд. откл. Мин. Макс. Относит.

Добавьте хотя бы одну строку в виде «имя: 1, 2, 3», чтобы увидеть сравнение.

Как читать таблицу бенчмарков, не обманываясь

Среднее и медиана расходятся не просто так

Таблица показывает оба значения, и разрыв между ними — первое, на что стоит посмотреть. Если среднее заметно выше медианы, небольшое число медленных прогонов тянет среднее вверх — пауза сборки мусора, шквал промахов кэша, операционная система, решившая запланировать что-то ещё на ваше ядро. Медиана игнорирует это; среднее — нет.

Ни одно из них автоматически не является правильным для цитирования. Если вы подбираете сервер под устойчивую пропускную способность, важно среднее, потому что эти медленные прогоны действительно потребляют время. Если вы сравниваете две реализации, чтобы решить, какой алгоритм лучше, медиана обычно честнее, потому что выбросы измеряют вашу машину, а не ваш код. Цитируйте то, что вы реально обосновываете, и указывайте, что именно.

Стандартное отклонение говорит, реально ли сравнение

Разница в средних что-то значит, только если она велика относительно разброса. Две серии по 12,0 и 12,4 миллисекунды со стандартным отклонением 0,05 действительно разные. Те же два средних со стандартным отклонением 3,0 — это одно и то же число в разных шляпах, и любой вывод из них — шум.

Этот инструмент использует выборочное стандартное отклонение, деля на n-1, а не на n. Это правильный выбор здесь: ваши прогоны — выборка из совокупности всех возможных прогонов, а не вся совокупность, и деление на n систематически недооценило бы разброс. При одном прогоне разброс посчитать не из чего, поэтому в столбце стоит ноль — напоминание, что одно измерение — это не бенчмарк.

Относительная скорость — число, которое запоминают

Последний столбец выражает каждую серию как кратность самой быстрой, потому что именно в такой форме результат обычно повторяют. «Новый парсер в 2,4 раза быстрее» распространяется; «новый парсер в среднем 8,2 миллисекунды» — нет, если слушатель уже не знает базу.

Два предостережения. Во-первых, отношение наследует всю неопределённость двух стоящих за ним средних, поэтому разница 1,05× на шумных данных — это вообще не разница. Во-вторых, отношения средних — не то же, что средние отношений, и если прогоны сильно различаются по размеру, два могут указывать в разные стороны. Когда числа близки, приводите разброс вместе с отношением и дайте читателю судить.

Работает полностью в вашем браузере на чистом JavaScript — без библиотек, без загрузок, без отслеживания.

Часто задаваемые вопросы

В каком формате должны быть измерения?
Одна строка на серию: метка, двоеточие, затем числа. Запятые, точки с запятой, пробелы и табуляции считаются разделителями, поэтому большая часть скопированного вывода работает без правок.
Конвертирует ли выбор единиц что-нибудь?
Нет. Он только подписывает вывод. Статистика считается по числам ровно в том виде, как вы их ввели, поэтому все серии на странице должны быть уже в одной единице.
Почему стандартное отклонение нулевое для одного прогона?
Выборочное стандартное отклонение делит на n-1, что равно нулю при n=1. У одного измерения нечего разнести, и ноль — намёк, что стоит собрать больше прогонов.
Как считается «относительное»?
Среднее каждой серии делится на наименьшее среднее на странице. Самая быстрая серия помечается как таковая, а не показывает 1,00×, поскольку в экспортируемой таблице это читается лучше.
Можно ли вставить вывод прямо из инструмента бенчмаркинга?
Обычно да. Пока в каждой строке есть имя, двоеточие и несколько чисел, лишняя пунктуация трактуется как разделитель. Строки без двоеточия пропускаются, а не вызывают ошибку.
Безопасно ли вставлять таблицу Markdown в pull-request?
Да — это обычный Markdown в стиле GitHub с заголовком и строкой-разделителем. Заголовки столбцов следуют языку страницы, поэтому переключите язык заранее, если хотите их на английском.