Help us improve
Share bugs, ideas, or general feedback.
From erne-universal
Diagnoses and optimizes React Native app performance: slow startup, janky scrolling, stuttering animations, large bundles, high memory.
npx claudepluginhub jubakitiashvili/everything-react-native-expoHow this skill is triggered — by the user, by Claude, or both
Slash command
/erne-universal:performance-optimizationThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
You are performing a systematic performance diagnosis on a React Native application. Follow this step-by-step process.
Optimizes React Native apps with guidelines for FPS, TTI, bundle size, memory leaks, re-renders, and animations. Helps with Hermes, JS thread blocking, FlashList, native modules, and frame drops.
Provides React Native performance optimization guidelines for FPS, TTI, bundle size, memory leaks, re-renders, and animations. Guides Hermes optimization, JS thread blocking, bridge overhead, FlashList, native modules, and jank debugging.
Optimizes React Native app performance with Hermes engine, memoization, lazy loading, expo-image optimization, and profiling for sluggish scrolling, slow startups (>2s), low FPS, and large bundles.
Share bugs, ideas, or general feedback.
You are performing a systematic performance diagnosis on a React Native application. Follow this step-by-step process.
Invoke when:
| Symptom | Likely Cause | First Check |
|---|---|---|
| Slow startup | Large bundle, heavy init | Bundle size, eager imports |
| Janky scrolling | List renderer, heavy cells | FlatList vs FlashList, cell complexity |
| Stuttering animations | JS thread blocking | Worklets, useAnimatedStyle |
| High memory | Leaks, large images | Image caching, subscription cleanup |
| Slow navigation | Heavy screens, eager loading | Lazy loading, screen weight |
Bundle Analysis:
npx react-native-bundle-visualizer
# or for Expo:
npx expo export --dump-sourcemap
Target: < 1.5MB JavaScript bundle
FPS Monitoring:
useFrameCallback from ReanimatedTTI (Time to Interactive):
Memory:
Bundle Size:
React.lazy() with SuspenseRendering:
FlatList with FlashList + estimatedItemSizeReact.memouseCallback for event handlers passed to childrenAnimations:
useAnimatedStyle instead of inline animated valueswithSequence/withDelaycancelAnimation for cleanupImages:
expo-image with cachePolicy="memory-disk"Memory:
useEffect returnRe-measure after each optimization:
## Performance Report
| Metric | Before | After | Target | Status |
|--------|--------|-------|--------|--------|
| Bundle size | 2.1MB | 1.4MB | <1.5MB | PASS |
| TTI | 3.2s | 1.8s | <2s | PASS |
| List FPS | 45fps | 60fps | 60fps | PASS |
| Memory (5min) | +80MB | +12MB | <20MB | PASS |