Home

Awesome

ECS benchmark comparison

A suite of benchmarks designed to test and compare JavaScript ECS library performance across a variety of challenging circumstances.

SoA implementations

op/spacked_5simple_iterfrag_iterentity_cycleadd_remove
bitecs335,064115,954431,2071,6342,334
harmony-ecs313,278132,026489,9034,0404,194
piecs364,652177,269470,90464,07520,649
wolf-ecs378,471165,951535,3622,5973,913

Object-based implementations

op/spacked_5simple_iterfrag_iterentity_cycleadd_remove
becsy103,41728,33761,2966928,953
ecsy7,8224,82224,537120975
geotic45,95729,63149,4821061,099
goodluck53,92731,89477,57527,253301,727
javelin-ecs65,99038,474121,2076563,286
miniplex109,29636,31620,3723106,645
perform-ecs55,24194,79131,170159442
picoes6,8144,22312,3682,6794,303
tiny-ecs16,39135,48845,7601941,082
uecs29,85514,7479,8611,7245,207

The best result for each benchmark is marked in bold text. Note that run to run variance for these benchmarks is typically 1-4%. Any benchmarks within a few percent of each other should be considered “effectively equal”. The above benchmarks are run on node v17.8.0.

Frameworks

Benchmarks

Packed Iteration (5 queries)

This benchmark is designed to test the core overheads involved in component iteration when multiple queries are run.

Simple Iteration

This benchmark is designed to test how efficiently the ECS can run multiple independent systems.

Fragmented Iteration

This benchmark is designed to test how the ECS handles iteration through a fragmented dataset.

Entity Cycle

This benchmark is designed to test the base cost of constructing and destroying entities into the ECS.

Add / Remove

This benchmark is designed to test how quickly the ECS can add and then remove a component from an existing entity.