Tinybench
Para medir y comparar el rendimiento de funciones JavaScript con estadísticas fiables.
Librería de benchmarking minimalista para JavaScript y TypeScript, sin dependencias y multirruntime.
Notas y contexto
Qué es
Tinybench es una librería de benchmarking ligera para JavaScript y TypeScript creada por la organización tinylibs. Está escrita en TypeScript, no tiene dependencias y ocupa unos 2 KB minificada y comprimida. Mide tiempos con process.hrtime o performance.now() y funciona en distintos runtimes (Node.js, navegadores, Deno, Bun). Se distribuye bajo licencia MIT.
Para qué sirve
- Medir cuánto tarda en ejecutarse una función y obtener métricas estadísticas.
- Comparar varias implementaciones de un mismo algoritmo para elegir la más rápida.
- Detectar regresiones de rendimiento en bibliotecas o utilidades propias.
- Generar tablas de resultados legibles directamente en consola.
Cuándo usarlo
Es ideal cuando necesitas microbenchmarks fiables sin arrastrar dependencias pesadas, tanto en Node como en el navegador. Ofrece estadísticas como desviación típica, margen de error, varianza y percentiles. Si buscas un benchmarking integrado en tu test runner, Vitest incorpora bench (basado en Tinybench); para escenarios clásicos en Node también existe Benchmark.js, aunque está menos mantenido.
Ejemplo
Instalación con npm:
npm install -D tinybench
Uso básico comparando dos tareas:
import { Bench } from 'tinybench';
const bench = new Bench({ name: 'ejemplo', time: 100 });
bench
.add('concat', () => {
let s = '';
for (let i = 0; i < 1000; i++) s += i;
})
.add('join', () => {
const parts = [];
for (let i = 0; i < 1000; i++) parts.push(i);
parts.join('');
});
await bench.run();
console.table(bench.table());
Puntos clave
- Sin dependencias y muy ligera: en torno a 2 KB minificada y gzipped.
- Detecta automáticamente funciones asíncronas y admite señales de aborto por tarea y por bench.
- Estadísticas completas: desviación típica, margen de error, varianza y percentiles.
- Arquitectura basada en eventos y modos de concurrencia para casos avanzados.
Ten en cuenta
Es una herramienta de microbenchmarking: los resultados pueden variar según el entorno, la carga del sistema y las optimizaciones del motor JavaScript, así que conviene interpretarlos con criterio. No sustituye al profiling de aplicaciones completas. La documentación oficial es una referencia de API generada con TypeDoc, más útil como consulta que como tutorial. El proyecto está activo y bien mantenido (última versión v6.0.2).