| name | react-performance |
| description | React Native performance optimization guide. Use when working on performance issues, optimizing renders, improving startup time, debugging memory leaks, optimizing lists/animations, or analyzing bundle size. Covers profiling, memoization, React Compiler, Concurrent React, state patterns, FlatList optimization, Reanimated, native threading, and bundle optimization. |
React Native Performance
How to Use This Skill
- Read ONLY this file first - Don't load references yet
- Use Quick Diagnosis table to identify the ONE relevant reference
- Load ONLY that reference - Never load multiple references at once
- If user's problem is unclear - Ask clarifying questions before loading any reference
⚠️ Each reference file is 5-10KB. Loading multiple files wastes context. Be surgical.
Comprehensive guide for optimizing React Native applications. Always measure before optimizing - use profiling tools to identify actual bottlenecks.
Quick Diagnosis
Don't know where the problem comes from?
Ask the user first:
- What feels slow? (startup, scroll, animation, interaction)
- When does it happen?
- Which screen/component?
Then load profiling.md ONLY if you need help guiding them through profiling.
Reference Files
Loading strategy: Pick ONE file based on the diagnosed symptom. Never preload "just in case".
🔬 Investigation
- profiling.md - React DevTools, JS Profiler, Flashlight, Perf Monitor. Use to identify unknown bottlenecks.
🧠 Memory
⚛️ React Optimization
- rerender-optimization.md - Why components re-render, anti-patterns, prevention strategies.
- memoization.md -
useMemo, useCallback, React.memo usage and pitfalls.
- react-compiler.md - Automatic memoization, Rules of React, when compiler can't optimize.
- concurrent-react.md -
startTransition, useDeferredValue, <Activity>, Suspense for responsive UI.
- state-patterns.md - State colocation, Zustand selectors, uncontrolled components.
📱 Runtime Performance
🚀 Startup & Bundle
🔧 Native Layer
Performance Targets
| Metric | Target | Tool |
|---|
| FPS | 60 (ideally 120 on capable devices) | Perf Monitor, Flashlight |
| TTI | < 2s cold start | Native profilers |
| JS Frame | < 16ms (8ms for 120fps) | JS Profiler |
| Memory | Stable over time (no growth) | Heap snapshots |
Optimization Workflow
- Measure - Profile the app, identify the actual bottleneck
- Isolate - Reproduce the issue in a minimal scenario
- Fix - Apply targeted optimization from relevant reference
- Verify - Re-measure to confirm improvement
- Monitor - Set up continuous performance tracking
Key Principles
- Measure first: Never optimize based on assumptions
- 80/20 rule: 80% of issues come from 20% of code
- JS thread < 16ms: Keep frame budget for 60 FPS
- Minimize bridge crossing: Batch operations, use native drivers
- Virtualize large lists: Never render off-screen content
- Defer non-critical work: Use
startTransition and lazy loading