Constructor de benchmarks

Pega tiempos en bruto de varias implementaciones y obten media, mediana, desviacion tipica, minimo, maximo y velocidad relativa en una tabla comparativa, mas una version en Markdown.

Convierte un monton de tiempos en una tabla comparativa. Una serie por linea: una etiqueta, dos puntos y tus medidas en bruto. Calcula las estadisticas habituales, ordena todo frente a la mas rapida y genera una tabla Markdown para el pull request.

Una serie por linea como "nombre: valor, valor, valor". Comas, puntos y comas o espacios sirven de separador.

Serie Ejec. Media Mediana Desv. tip. Min Max Relativo

Anade al menos una linea con el formato "nombre: 1, 2, 3" para ver la comparacion.

Leer una tabla de benchmarks sin dejarse enganar

Media y mediana discrepan por algo

La tabla muestra las dos, y la distancia entre ellas es lo primero que merece mirarse. Si la media queda bastante por encima de la mediana, unas pocas ejecuciones lentas estan tirando del promedio hacia arriba: una pausa del recolector de basura, una tormenta de fallos de cache, el sistema operativo decidiendo planificar otra cosa en tu nucleo. La mediana ignora eso; la media no.

Ninguna de las dos es automaticamente la correcta. Si estas dimensionando un servidor por rendimiento sostenido, la media es lo que importa, porque esas ejecuciones lentas consumen tiempo real. Si comparas dos implementaciones para decidir que algoritmo es mejor, la mediana suele ser mas justa, porque los valores atipicos miden tu maquina y no tu codigo. Cita la que realmente estas razonando, y di cual es.

La desviacion tipica dice si la comparacion es real

Una diferencia de medias solo significa algo si es grande frente a la dispersion. Dos series en 12,0 y 12,4 milisegundos con una desviacion tipica de 0,05 son genuinamente distintas. Esas mismas dos medias con una desviacion de 3,0 son el mismo numero con distinto sombrero, y cualquier conclusion que se saque de ahi es ruido.

Esta herramienta usa la desviacion tipica muestral, dividiendo entre n-1 en lugar de n. Es la eleccion correcta aqui: tus ejecuciones son una muestra extraida de la poblacion de todas las ejecuciones posibles, no la poblacion entera, y dividir entre n subestimaria sistematicamente la dispersion. Con una sola ejecucion no hay dispersion que calcular, asi que la columna marca cero, lo que recuerda que una medicion no es un benchmark.

La velocidad relativa es el numero que la gente recuerda

La ultima columna expresa cada serie como multiplo de la mas rapida, porque esa es la forma en que suele repetirse el resultado. "El parser nuevo es 2,4 veces mas rapido" viaja; "el parser nuevo promedia 8,2 milisegundos" no, salvo que quien escucha ya conozca la referencia.

Dos avisos. Primero, el cociente hereda toda la incertidumbre de las dos medias que hay detras, asi que una diferencia de 1,05x sobre datos ruidosos no es ninguna diferencia. Segundo, el cociente de medias no es lo mismo que la media de cocientes, y si las ejecuciones varian mucho de tamano ambos pueden apuntar en direcciones distintas. Cuando los numeros esten cerca, informa de la dispersion junto al cociente y deja juzgar al lector.

Se ejecuta por completo en tu navegador con JavaScript nativo: sin librerias, sin subidas, sin rastreo.

Preguntas frecuentes

Que formato necesitan las medidas?
Una linea por serie: una etiqueta, dos puntos y luego los numeros. Comas, puntos y comas, espacios y tabuladores cuentan como separadores, asi que la mayoria de salidas copiadas funcionan sin editar.
El selector de unidad convierte algo?
No. Solo etiqueta la salida. Las estadisticas se calculan sobre los numeros tal cual los escribes, asi que todas las series de la pagina deben estar ya en la misma unidad.
Por que la desviacion tipica es cero con una sola ejecucion?
La desviacion muestral divide entre n-1, que es cero cuando n vale uno. Una unica medicion no tiene dispersion que informar, y el cero sugiere que recojas mas ejecuciones.
Como se calcula "relativo"?
La media de cada serie se divide entre la media mas pequena de la pagina. La serie mas rapida se etiqueta como tal en vez de mostrar 1,00x, porque se lee mejor en la tabla exportada.
Puedo pegar la salida de una herramienta de benchmarking?
Normalmente si. Mientras cada linea tenga nombre, dos puntos y algunos numeros, la puntuacion extra se trata como separador. Las lineas sin dos puntos se omiten en lugar de dar error.
La tabla Markdown se puede pegar en un pull request?
Si: es Markdown estandar de GitHub con fila de cabecera y fila separadora. Las cabeceras siguen el idioma de la pagina, asi que cambia de idioma primero si las quieres en ingles.