Real measured performance data from the What Framework test suite. All benchmarks run on a MacBook Pro M2.
| 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.
| 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 |
| 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.
| 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 |
| 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 |
| Package | Size (gzipped) |
|---|---|
| what-framework (core) | ~4kB |
Measured using gzip -9 compression.
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.