Skillshub react-native-performance
Optimization strategies for smooth 60fps mobile apps. Use when optimizing React Native app performance, reducing re-renders, or fixing frame drops. (triggers: **/*.tsx, **/*.ts, FlatList, memo, useMemo, useCallback, performance, optimization)
install
source · Clone the upstream repo
git clone https://github.com/ComeOnOliver/skillshub
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/ComeOnOliver/skillshub "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/HoangNguyen0403/agent-skills-standard/react-native-performance" ~/.claude/skills/comeonoliver-skillshub-react-native-performance && rm -rf "$T"
manifest:
skills/HoangNguyen0403/agent-skills-standard/react-native-performance/SKILL.mdsource content
React Native Performance
Priority: P0 (CRITICAL)
FlatList (60fps List) Optimization
: Reduce to 5-10 for memory-heavy lists (default 21).windowSize
should cover the first viewport.initialNumToRender
: Provide for fixed-height items. Skips runtime measurement.getItemLayout
: Enable for Android (default true) to offload clipped items.removeClippedSubviews
: Limit to 5-10 items per frame to prevent JS thread blockage.maxToRenderPerBatch
: Use stable unique IDs, never arrays index.keyExtractor- Function Refs: Define
outside component or wrap inrenderItem
.useCallback
React Native Core Performance
- The Engine: Ensure Hermes engine is enabled (default in 0.7x). Verify via
.global.HermesInternal - Animations: Use Native Driver (
) or Reanimated 3 for GPU-accelerated 60fps animations.useNativeDriver: true - Re-renders: Use
andReact.memo
for expensive props. Profile via Flipper (React DevTools) for flamegraphs.useMemo - Network: Batch API calls. Use React Query/Zustand to prevent unnecessary screen refreshes.
- Images: Use
for caching and priority. Avoid large PNGs; use WebP.react-native-fast-image - Bundle Size: Prune unused dependencies. Use ProGuard/R8 (Android) and Fastlane for builds.
Navigation
- Lazy Screens: Use
prop for stack screens (enabled by default).lazy - Avoid Listeners: Remove navigation event listeners in cleanup.
Images
- Image Caching: Use
for network images.react-native-fast-image - Resize: Provide
and fixed dimensions.resizeMode - Format: Use WebP for smaller size.
Bundle Size
- Hermes: Enable for faster startup (default in RN 0.70+).
- Tree Shaking: Remove unused imports.
- ProGuard/R8: Enable code shrinking on Android.
Anti-Patterns
- No ScrollView for Large Lists: Use FlatList.
- No Inline Styles: Use
(optimized).StyleSheet.create - No console.log in Production: Strip with babel plugin.
References
See references/optimization-guide.md for FlatList configuration, memoization rules, and bundle analysis.