Skip to content
forma.
v3.0
☰

Engineering the web

Read the measurement.

A useful benchmark tells you what happened, where it happened, and what it does not prove.

A payload is a fixture, not a promise

The final 3.0 comparison fixture shipped 9,388 gzip bytes for Forma and 61,190 for React with React Compiler. Those are the built fixtures, including their selected features. They are not universal application sizes or the size of every Forma package.

Synchronous work is not input-to-paint latency

The update benchmark times committed DOM work. React uses flushSync so the measured interval includes its commit. A separate settled measurement includes two animation-frame boundaries. Neither should be relabelled as the other.

Tails and losing rows belong in the table

A median describes a typical sample. The p95 shows a tail. Different workloads stress different paths, so the performance page includes all recorded browser runtime workloads and all three engines, not just one impressive ratio.

Native walker time has a boundary too

The native render walk starts with prepared input. Its timing excludes parsing, application logic, networking and database work. It is evidence about the renderer, not a guarantee about an entire request.

Keep old evidence honest

Earlier development races helped guide implementation. They used different versions and environments. The current page uses the published 3.0 artifact set and links the original aggregate. Reproducing it on another machine can produce different results.

Inspect the numbers, methods and raw data ↗

Find your next answer.

Search Forma 3.0 documentation, guides and examples.