La física de la memoria: ECS en JavaScript frente a objetos clásicos

Fuentes: The Physics of Memory: ECS in JavaScript vs. Classic Objects

Un benchmark comparativo de «bolas que rebotan en una caja» evalúa si la arquitectura Entity Component System (ECS), pensada para mejorar la localidad de memoria y aprovechar las cachés L1/L2 de la CPU, resulta viable y rentable en JavaScript frente al paradigma orientado a objetos tradicional. El experimento, ejecutado sobre un chip Apple M4 Pro durante 200 fotogramas, cruza cinco variables: lenguaje (JavaScript sobre V8 con TypedArrays frente a WebAssembly mediante AssemblyScript), arquitectura (OOP con arrays de referencias frente a ECS con Structure of Arrays), fase amplia de colisiones (árbol espacial AVL frente a Sweep & Prune), estrategia de ordenación (inserción, quicksort híbrido, mergesort híbrido sin copia y Array.sort nativo) y coherencia de movimiento (errático, errante o estático).

El estudio confirma que Sweep & Prune con array plano supera al árbol espacial incluso cuando ambos usan memoria contigua: 1,81 ms frente a 9,97 ms con 15.000 entidades errantes, una aceleración de 9x sobre la referencia OOP. La migración de objetos a TypedArrays en ECS ya aporta entre 1,58x y 24,9x según la coherencia espacial, y WebAssembly añade otro 2,5x gracias a la posibilidad de desactivar las comprobaciones de límites. También advierte de la trampa del ordenamiento por inserción bajo movimiento caótico —donde degenera a complejidad cuadrática y dispara los tiempos de fotograma a 36,39 ms— y propone un híbrido que recurre a inserción por debajo de 12 elementos. Frente a una implementación ECS artesanal, la librería bitECS resulta alrededor del doble de lenta pero aún ofrece una mejora de 14x sobre el baseline OOP, lo que la convierte en la opción más equilibrada para proyectos reales.