Co-Pilot
Updated a month ago

react-native-best-practices

Ccallstackincubator
0.7k
callstackincubator/agent-skills/skills/react-native-best-practices
86
Agent Score

💡 Summary

A comprehensive reference skill providing React Native performance optimization guidelines across JavaScript, native, and bundling domains.

🎯 Target Audience

React Native DevelopersMobile App Performance EngineersSenior Frontend EngineersMobile Tech LeadsReact Native Library Authors

🤖 AI Roast:A comprehensive guide that's so thorough, it might need a performance optimization guide for reading it.

Security AnalysisLow Risk

The skill includes shell commands for bundling and profiling, which if executed in an untrusted environment could pose risks. Mitigation: Treat all provided commands as references; review and understand them before execution, especially those involving file output or system profiling.


name: react-native-best-practices description: Provides React Native performance optimization guidelines for FPS, TTI, bundle size, memory leaks, re-renders, and animations. Applies to tasks involving Hermes optimization, JS thread blocking, bridge overhead, FlashList, native modules, or debugging jank and frame drops. license: MIT metadata: author: Callstack tags: react-native, expo, performance, optimization, profiling

React Native Best Practices

Overview

Performance optimization guide for React Native applications, covering JavaScript/React, Native (iOS/Android), and bundling optimizations. Based on Callstack's "Ultimate Guide to React Native Optimization".

Skill Format

Each reference file follows a hybrid format for fast lookup and deep understanding:

  • Quick Pattern: Incorrect/Correct code snippets for immediate pattern matching
  • Quick Command: Shell commands for process/measurement skills
  • Quick Config: Configuration snippets for setup-focused skills
  • Quick Reference: Summary tables for conceptual skills
  • Deep Dive: Full context with When to Use, Prerequisites, Step-by-Step, Common Pitfalls

Impact ratings: CRITICAL (fix immediately), HIGH (significant improvement), MEDIUM (worthwhile optimization)

When to Apply

Reference these guidelines when:

  • Debugging slow/janky UI or animations
  • Investigating memory leaks (JS or native)
  • Optimizing app startup time (TTI)
  • Reducing bundle or app size
  • Writing native modules (Turbo Modules)
  • Profiling React Native performance
  • Reviewing React Native code for performance

Priority-Ordered Guidelines

| Priority | Category | Impact | Prefix | |----------|----------|--------|--------| | 1 | FPS & Re-renders | CRITICAL | js-* | | 2 | Bundle Size | CRITICAL | bundle-* | | 3 | TTI Optimization | HIGH | native-*, bundle-* | | 4 | Native Performance | HIGH | native-* | | 5 | Memory Management | MEDIUM-HIGH | js-*, native-* | | 6 | Animations | MEDIUM | js-* |

Quick Reference

Critical: FPS & Re-renders

Profile first:

# Open React Native DevTools # Press 'j' in Metro, or shake device → "Open DevTools"

Common fixes:

  • Replace ScrollView with FlatList/FlashList for lists
  • Use React Compiler for automatic memoization
  • Use atomic state (Jotai/Zustand) to reduce re-renders
  • Use useDeferredValue for expensive computations

Critical: Bundle Size

Analyze bundle:

npx react-native bundle \ --entry-file index.js \ --bundle-output output.js \ --platform ios \ --sourcemap-output output.js.map \ --dev false --minify true npx source-map-explorer output.js --no-border-checks

Common fixes:

  • Avoid barrel imports (import directly from source)
  • Remove unnecessary Intl polyfills (Hermes has native support)
  • Enable tree shaking (Expo SDK 52+ or Re.Pack)
  • Enable R8 for Android native code shrinking

High: TTI Optimization

Measure TTI:

  • Use react-native-performance for markers
  • Only measure cold starts (exclude warm/hot/prewarm)

Common fixes:

  • Disable JS bundle compression on Android (enables Hermes mmap)
  • Use native navigation (react-native-screens)
  • Defer non-critical work with InteractionManager

High: Native Performance

Profile native:

  • iOS: Xcode Instruments → Time Profiler
  • Android: Android Studio → CPU Profiler

Common fixes:

  • Use background threads for heavy native work
  • Prefer async over sync Turbo Module methods
  • Use C++ for cross-platform performance-critical code

References

Full documentation with code examples in references/:

JavaScript/React (js-*)

| File | Impact | Description | |------|--------|-------------| | js-lists-flatlist-flashlist.md | CRITICAL | Replace ScrollView with virtualized lists | | js-profile-react.md | MEDIUM | React DevTools profiling | | js-measure-fps.md | HIGH | FPS monitoring and measurement | | js-memory-leaks.md | MEDIUM | JS memory leak hunting | | js-atomic-state.md | HIGH | Jotai/Zustand patterns | | js-concurrent-react.md | HIGH | useDeferredValue, useTransition | | js-react-compiler.md | HIGH | Automatic memoization | | js-animations-reanimated.md | MEDIUM | Reanimated worklets | | js-uncontrolled-components.md | HIGH | TextInput optimization |

Native (native-*)

| File | Impact | Description | |------|--------|-------------| | native-turbo-modules.md | HIGH | Building fast native modules | | native-sdks-over-polyfills.md | HIGH | Native vs JS libraries | | native-measure-tti.md | HIGH | TTI measurement setup | | native-threading-model.md | HIGH | Turbo Module threads | | native-profiling.md | MEDIUM | Xcode/Android Studio profiling | | native-platform-setup.md | MEDIUM | iOS/Android tooling guide | | native-view-flattening.md | MEDIUM | View hierarchy debugging | | native-memory-patterns.md | MEDIUM | C++/Swift/Kotlin memory | | native-memory-leaks.md | MEDIUM | Native memory leak hunting | | native-android-16kb-alignment.md | CRITICAL | Third-party library alignment for Google Play |

Bundling (bundle-*)

| File | Impact | Description | |------|--------|-------------| | bundle-barrel-exports.md | CRITICAL | Avoid barrel imports | | bundle-analyze-js.md | CRITICAL | JS bundle visualization | | bundle-tree-shaking.md | HIGH | Dead code elimination | | bundle-analyze-app.md | HIGH | App size analysis | | bundle-r8-android.md | HIGH | Android code shrinking | | bundle-hermes-mmap.md | HIGH | Disable bundle compression | | bundle-native-assets.md | HIGH | Asset catalog setup | | bundle-library-size.md | MEDIUM | Evaluate dependencies | | bundle-code-splitting.md | MEDIUM | Re.Pack code splitting |

Searching References

# Find patterns by keyword grep -l "reanimated" references/ grep -l "flatlist" references/ grep -l "memory" references/ grep -l "profil" references/ grep -l "tti" references/ grep -l "bundle" references/

Problem → Skill Mapping

| Problem | Start With | |---------|------------| | App feels slow/janky | js-measure-fps.mdjs-profile-react.md | | Too many re-renders | js-profile-react.mdjs-react-compiler.md | | Slow startup (TTI) | native-measure-tti.mdbundle-analyze-js.md | | Large app size | bundle-analyze-app.mdbundle-r8-android.md | | Memory growing | js-memory-leaks.md or native-memory-leaks.md | | Animation drops frames | js-animations-reanimated.md | | List scroll jank | js-lists-flatlist-flashlist.md | | TextInput lag | js-uncontrolled-components.md | | Native module slow | native-turbo-modules.mdnative-threading-model.md | | Native library alignment issue | native-android-16kb-alignment.md |

Attribution

Based on "The Ultimate Guide to React Native Optimization" by Callstack.

5-Dim Analysis
Clarity9/10
Novelty6/10
Utility10/10
Completeness10/10
Maintainability8/10
Pros & Cons

Pros

  • Extensive coverage of critical performance areas
  • Clear priority ordering and problem mapping
  • Provides actionable commands and code snippets
  • Well-structured for both quick reference and deep dives

Cons

  • High volume of information may be overwhelming for beginners
  • Requires existing React Native project context to apply
  • Some optimizations are platform-specific (iOS/Android)
  • Lacks interactive examples or runtime validation

Related Skills

custom-plugin-react-native

B
toolCo-Pilot
78/ 100

“Powerful, but the setup might scare off the impatient.”

skills

B
toolCo-Pilot
76/ 100

“A promising toolkit for Expo, but its documentation is as minimalist as a developer who hasn't had their morning coffee.”

react-native-expert

B
toolCo-Pilot
74/ 100

“It's a competent checklist for avoiding common React Native pitfalls, but it won't teach you the dark arts of native module debugging.”

Disclaimer: This content is sourced from GitHub open source projects for display and rating purposes only.

Copyright belongs to the original author callstackincubator.