React Native Performance
Deep performance reference. Canonical home for React Native performance — covers FlatList tuning, memoization, Hermes, expo-image, FPS measurement, bundle treemap analysis, Hermes mmap, R8 Android, 16 KB page-size alignment, view flattening, native threading, JNI memory patterns, and the profiling toolchain.
For Fabric/JSI/TurboModules architectural overview, see react-native-core/features-new-architecture.md.
Core References
| Topic |
Description |
Reference |
| FPS & re-renders |
FPS measurement, profile-react, React Compiler (Expo SDK 54+), atomic state, Concurrent React, Reanimated worklets (v3/v4) |
core-fps-rerenders |
| Bundle size |
App size and JS bundle reduction — Ruler, Emerge, source-map-explorer, Expo Atlas, tree shaking, barrel exports, R8, asset catalog, Hermes mmap, code splitting |
core-bundle-size |
Features
| Topic |
Description |
Reference |
| Time to Interactive |
TTI measurement methodology, cold-start pipeline markers, react-native-performance |
features-tti |
| Native performance |
TurboModule threading, sync vs async, view flattening, native SDKs over JS polyfills, 16 KB alignment, platform setup |
features-native-performance |
| Memory |
JS leak detection, native reference cycles, JNI refs, smart pointers, common leak patterns |
features-memory |
Best Practices
| Topic |
Description |
Reference |
| Profiling tools |
DevTools flamegraph, Flashlight, Xcode Instruments, Android Studio Profiler, Perfetto, bundle analyzers |
best-practices-profiling |
Key Recommendations
- Always measure first — never optimize without a baseline (Flashlight for FPS/TTI, source-map-explorer for bundle)
- Hermes mmap removed in RN 0.79+ — JS bundle is now resident memory; bundle size affects startup memory directly
- TurboModules — prefer sync methods for fast operations; async only when work crosses threads
- React Compiler is opt-in via Expo SDK 54+ (
experiments.reactCompiler: true) — replaces most useMemo/useCallback
- Profile before refactoring — 80% of perf wins come from removing waterfalls, expensive renders, and bundle bloat, not micro-optimizations
- Reanimated v3 stable; v4 opt-in/beta — pick one per project, don't mix