Performance Benchmarks

Real measured performance data from the What Framework test suite. All benchmarks run on a MacBook Pro M2.

Signals

Operation Ops/Second Time per Op
Signal create 9.3M ops/sec 0.0001ms
Signal read (100x per iteration) 3.8M ops/sec 0.0003ms
Signal write (no subscribers) 1.1M ops/sec 0.0009ms
Signal write (1 subscriber) 137K ops/sec 0.007ms

Subscriber overhead is expected — the effect runs on every write.

Computed Values

Operation Ops/Second Time per Op
Computed chain (depth 5) 1.2M ops/sec 0.0008ms
Computed from 10 signals 890K ops/sec 0.001ms

Effects

Operation Ops/Second Time per Op
Effect create + dispose 4.2M ops/sec 0.0002ms
Batch 100 writes 554K ops/sec 0.002ms

Batching prevents intermediate computations, making 100 writes nearly as fast as 1.

Rendering (h function)

Operation Ops/Second Time per Op
Single element creation 8.9M ops/sec 0.0001ms
List of 100 items 77K ops/sec 0.013ms
Nested component tree (depth 5) 1.8M ops/sec 0.0006ms

Server-Side Rendering

Operation Ops/Second Time per Op
SSR simple element 1.5M ops/sec 0.0007ms
SSR list of 100 items 18K ops/sec 0.055ms
SSR complex component 45K ops/sec 0.022ms

Bundle Size

Package Size (gzipped)
what-framework (core) ~4kB

Measured using gzip -9 compression.

Methodology

All benchmarks run on Node.js with the following approach:

Warmup: 1000 iterations discarded before measurement

Iterations: 10,000+ iterations per test

Timing: High-resolution performance.now()

Calculation: Trimmed mean (discard top/bottom 10%)

Environment: MacBook Pro M2, Node.js v20

Source code available in /benchmark directory. Run with npm run bench.