Co-Pilot / 辅助式
更新于 a month ago

react-native-best-practices

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

💡 摘要

一个全面的参考技能,提供跨 JavaScript、原生和打包领域的 React Native 性能优化指南。

🎯 适合人群

React Native 开发人员移动应用性能工程师高级前端工程师移动技术负责人React Native 库作者

🤖 AI 吐槽:一份如此全面的指南,可能连阅读它都需要一份性能优化指南。

安全分析低风险

该技能包含用于打包和分析的 shell 命令,如果在不受信任的环境中执行可能会带来风险。缓解措施:将所有提供的命令视为参考;在执行前审查并理解它们,特别是那些涉及文件输出或系统分析的命令。


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.

五维分析
清晰度9/10
创新性6/10
实用性10/10
完整性10/10
可维护性8/10
优缺点分析

优点

  • 涵盖关键性能领域的广泛内容
  • 清晰的优先级排序和问题映射
  • 提供可操作的命令和代码片段
  • 结构良好,适合快速参考和深入学习

缺点

  • 信息量大,可能对初学者造成压力
  • 需要现有的 React Native 项目背景才能应用
  • 部分优化是平台特定的(iOS/Android)
  • 缺乏交互式示例或运行时验证

相关技能

custom-plugin-react-native

B
toolCo-Pilot / 辅助式
78/ 100

“看起来很能打,但别让配置把人劝退。”

skills

B
toolCo-Pilot / 辅助式
76/ 100

“一个很有前途的 Expo 工具包,但其文档简洁得像一个还没喝早咖啡的开发者写的。”

react-native-expert

B
toolCo-Pilot / 辅助式
74/ 100

“这是一个避免常见React Native陷阱的合格清单,但它不会教你原生模块调试的'黑魔法'。”

免责声明:本内容来源于 GitHub 开源项目,仅供展示和评分分析使用。

版权归原作者所有 callstackincubator.