ToonJS v1.1: Velocidad Columnar y Robustez

2025-11-20Francesc Fors8 min

🚀 Anunciando ToonJS v1.1: Velocidad Columnar y Robustez

Estamos encantados de anunciar el lanzamiento de ToonJS v1.1, una actualización importante que transforma nuestra biblioteca de datos tabulares en un motor de alto rendimiento para el análisis de datos en TypeScript.

⚡ La Necesidad de Velocidad: Arquitectura Columnar Float64Array

El mayor cambio en la v1.1 está bajo el capó. Hemos refactorizado el motor de almacenamiento principal para usar una Arquitectura Columnar Híbrida.

  • Datos Numéricos: Almacenados en arrays tipados Float64Array. Esto permite al motor JavaScript optimizar el uso de memoria y usar instrucciones SIMD para operaciones matemáticas.
  • Datos Mixtos: Almacenados en Arrays estándar para flexibilidad.

¿El Resultado?

  • 10x Más Rápido en agregaciones numéricas.
  • Cero copias en muchas operaciones estadísticas.
  • Compatibilidad total hacia atrás.

🛡️ Fiabilidad Probada en Batalla

El rendimiento no significa nada sin corrección. Para la v1.1, no solo escribimos pruebas; diseñamos una fortaleza de pruebas.

  • 275+ Tests: Subiendo desde 102, cubriendo toda la superficie de la API.
  • Suite de Fuzzing: Ahora generamos datasets aleatorios (vacíos, una fila, tamaños primos, semillas negativas) para asegurar que ToonJS nunca falle en casos límite.
  • Verificación de Invariantes: Verificamos propiedades algebraicas (ej. reverse(reverse(x)) == x) para garantizar consistencia lógica.

📊 Nuevas Capacidades

Hemos añadido más de 25 nuevos métodos para convertir ToonJS en una herramienta seria para la ciencia de datos en el navegador o Node.js:

1. Análisis de Series Temporales

Analiza tendencias sin esfuerzo con funciones de ventana.

const trends = stockData
  .sortBy({ field: 'date', order: 'asc' })
  .rolling('close', 7, 'avg')  // Media móvil de 7 días
  .pctChange('close')          // Retornos diarios
  .lag('close', 1);            // Valores del día anterior

2. Operaciones de Matrices y Vectores

Realiza álgebra lineal directamente en tus data frames.

const magnitude = data.norm('l2', ['x', 'y', 'z']);
const dot = vecA.dotProduct(vecB);
const standardized = data.standardize(['age', 'income']); // Z-score

3. Estadísticas Avanzadas

const correlation = data.correlation('gdp', 'life_expectancy');
const percentiles = data.percentile('score'); // p50, p90, etc.

📦 Consíguelo Ahora

ToonJS v1.1 está disponible en NPM hoy.

npm install @cescofors/toonjs

Consulta la documentación completa y el playground interactivo en toonjs.dev.