Equivalent outcomes
Every timed operation is followed by output checks. Keyed tests verify order and surviving node identity. Hydration must retain server rows and bind each handler once.
PERFORMANCE LAB
The same work, six frameworks. Production builds, checked output, and the raw numbers behind every result.
This run contains failed checks. Missing results are shown as —; inspect the raw report before drawing conclusions.
Swipe the table to compare all six frameworks →
| Workload Lower is better | fusor | React | Svelte | SolidJS | Vue | Preact |
|---|
ALLOCATION & CLEANUP
JavaScript heap and WebAssembly linear memory are different accounting domains. These figures are diagnostic measurements, not a whole-process RAM ranking.
| Framework | 10k rowsJS heap Δ · MiB | 100k rowsJS heap Δ · MiB | After 10 cyclesJS heap Δ · MiB | Wasm capacityMiB · not live bytes | DOM nodesΔ after cleanup |
|---|
Heap and node deltas use a warmed, empty application; retained runtime caches are already included in that baseline. A Wasm allocator can reuse freed memory without shrinking its linear memory. Retained capacity alone is not evidence of a leak. Ten mount/unmount cycles can find regressions; they cannot prove that every application is leak-free.
READ THE FINE PRINT
Every timed operation is followed by output checks. Keyed tests verify order and surviving node identity. Hydration must retain server rows and bind each handler once.
DOM tests end at the framework's commit barrier. They exclude layout and paint. Startup is navigation to interactive rows on localhost, with a fresh browser context.
React and Preact aggregate arrays for fan-in; signal frameworks track individual values. These measure equivalent application work, not identical reactive graph internals.
The published run uses Binaryen 132. Install it and the prerequisites in the full methodology, then keep the raw samples. Omit FUSOR_WASM_OPT to measure the default compiler pipeline.
npm ci
npm ci --prefix benchmarks
export FUSOR_WASM_OPT=wasm-opt
just bench-build
BENCH_SEED=20261004 just bench-run my-run
# Review before publishing:
just bench publish --id my-runThe repository contains the harness and all six implementations under benchmarks/. There is no composite score. Browser scheduling, compiler versions, machine load, and application design all affect these results.