React Native is fast enough for almost any consumer app — the jank people complain about usually comes from a handful of avoidable mistakes, not the framework. UltraFit360 holds 60fps on mid-range Android phones because the studio treats performance as a habit, not a final-week firefight.
Lists are the number-one culprit
Most RN jank is a list rendering too much. The studio uses FlashList over FlatList for any scrolling collection, gives every row a stable key, and keeps row components pure with memoisation. A workout history with hundreds of entries scrolls as smoothly as ten because only the visible rows are ever mounted.
Move work off the JS thread
Animations driven from JavaScript stutter whenever the JS thread is busy. The studio runs all gesture and animation work on the native thread via Reanimated, so a sheet keeps sliding smoothly even while the app is fetching data or decoding an image in the background.
The performance checklist
- FlashList for every scrolling list; never map a large array into a ScrollView
- Reanimated for animations — keep them on the UI thread
- Memoise row components and expensive selectors
- Resize images to display size before bundling — never ship a 4000px image into a 120px avatar
- Profile on a real mid-range Android device, not a flagship iPhone
