Measurement protocol
Every number on this site comes from running bench/micro-fixed.mjs on the same machine. Anything that did not reproduce is not published.
Method
- Each case uses a fixed iteration count so one sample lands between 1 and 500 ms
- 21 samples per run; we use the median, never the mean
- Each case runs three independent times; we compute the coefficient of variation (CV) of the medians
- Above 10% CV we do not publish. Ratios are held to the same bar
- A GC pass before every sample (
--expose-gc)
What we do not measure
- DOM, layout, compositing, GPU, frame rate — we tried a separate rig and could not reproduce it (8 of 18 cells flipped between runs)
- Memory use (no heap sampling)
- Browser differences (all numbers are Node/V8)
- Rankings at other input sizes
Retracted claims
These claims did not reproduce, so we withdrew them.
| Claim | Why |
|---|---|
| Map.get is 17% slower than object property access | a different case mix made it 5% faster — the direction flipped |
| TypedArray summation is clearly faster | the gap is 6%, too small to advertise |
| backdrop-filter is an order of magnitude costlier than box-shadow | the render rig flipped 60fps↔20fps under identical conditions |
| box-shadow blur radius does not affect cost | same reason |
| will-change gives no benefit | same reason |
Environment
Node.js v25.9.0 (V8) / 12 logical cores / win32 x64 / single process. All 33 medians are in /data/micro.csv. Raw data ships as data/g1.json g2.json g3.json (three runs on 2026-11-10).