Optimizing React Native for 120Hz Displays
Techniques for achieving buttery-smooth animations and interactions on modern mobile devices.
120Hz exposes jank instantly
High refresh displays do not create performance problems, they broadcast them. A frame that “mostly worked” at 60Hz becomes visibly wrong when users can compare motion side by side with native surfaces.
The fix is rarely a single trick. It is a stack of decisions: fewer re-renders, stable keys, memoized selectors, lighter shadows, and animations that run on the right thread.
The UI thread vs the JS thread
If interaction depends on JS for every frame, you will lose under load. We aim for interactions that can proceed while JS is busy, and we isolate heavy work behind async boundaries with clear cancellation.
Lists are the classic battlefield: virtualization, stable item heights where possible, and image pipelines that decode off the hot path.
Motion design that respects hardware
Not every animation needs physics. Sometimes a crisp tween with fewer allocations beats a clever spring that allocates every frame.
We also validate designs on mid-tier devices, not only the flagship phone on a desk in SF.
A pragmatic rollout plan
Ship measurement first: frame metrics, slow navigation warnings, and traces for expensive screens. Then optimize the top three offenders until the experience feels native.
If you want a single KPI: time-to-interactive for primary flows on cold start, measured on real networks and warm devices.