🚀 快速安装

复制以下命令并运行,立即安装此 Skill:

npx @anthropic-ai/skills install callstackincubator/agent-skills/react-native-best-practices

💡 提示:需要 Node.js 和 NPM

React Native 最佳实践

概述

React Native 应用程序的性能优化指南,涵盖 JavaScript/React、原生(iOS/Android)和打包优化。基于 Callstack 的“React Native 优化终极指南”。

技能格式

每个参考文件都遵循混合格式,以便快速查阅和深入理解:

  • 快速模式:错误/正确的代码片段,用于即时模式匹配
  • 快速命令:用于进程/测量技能的 Shell 命令
  • 快速配置:用于以设置为中心的技能的配置片段
  • 快速参考:用于概念性技能的摘要表格
  • 深入探讨:包含何时使用、先决条件、分步指南、常见陷阱的完整上下文

影响评级:严重(立即修复)、高(显著改进)、中(值得优化的改进)

何时应用

在以下情况下参考这些指南:

  • 调试缓慢/卡顿的 UI 或动画
  • 调查内存泄漏(JS 或原生)
  • 优化应用启动时间(TTI)
  • 减少 Bundle 或应用大小
  • 编写原生模块(Turbo 模块)
  • 分析 React Native 性能
  • 审查 React Native 代码的性能

按优先级排序的指南

优先级 类别 影响 前缀
1 FPS 与重渲染 严重 js-*
2 Bundle 大小 严重 bundle-*
3 TTI 优化 native-*, bundle-*
4 原生性能 native-*
5 内存管理 中-高 js-*, native-*
6 动画 js-*

快速参考

优化工作流程

对于任何性能问题,请遵循此循环:测量 → 优化 → 重新测量 → 验证

  1. 测量:在更改前捕获基线指标(FPS、TTI、Bundle 大小)
  2. 优化:应用相关参考中的针对性修复
  3. 重新测量:运行相同的测量以获取更新后的指标
  4. 验证:确认改进(例如,FPS 从 45 到 60,TTI 从 3.2 秒到 1.8 秒,Bundle 从 2.1MB 到 1.6MB)

如果指标没有改善,请回退并尝试下一个建议的修复。

严重:FPS 与重渲染

首先进行分析:

# 打开 React Native 开发者工具
# 在 Metro 中按 'j',或摇晃设备 → "打开开发者工具"

常见修复:

  • 对列表使用 FlatList/FlashList 替换 ScrollView
  • 使用 React 编译器实现自动记忆化
  • 使用原子状态(Jotai/Zustand)减少重渲染
  • 对昂贵计算使用 useDeferredValue

严重:Bundle 大小

分析 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

优化后验证改进:

# 在更改前记录基线大小
ls -lh output.js  # 例如,之前:2.1 MB

# 应用修复后,重新打包并比较
npx react-native bundle --entry-file index.js --bundle-output output.js \
  --platform ios --dev false --minify true
ls -lh output.js  # 例如,之后:1.6 MB  (减少了 24%)

常见修复:

  • 避免使用桶模块导入(直接从源文件导入)
  • 移除不必要的 Intl polyfill(Hermes 有原生支持)
  • 启用摇树优化(Expo SDK 52+ 或 Re.Pack)
  • 为 Android 原生代码缩小启用 R8

高:TTI 优化

测量 TTI:

  • 使用 react-native-performance 添加标记点
  • 仅测量冷启动(排除温启动/热启动/预启动)

常见修复:

  • 在 Android 上禁用 JS Bundle 压缩(启用 Hermes mmap)
  • 使用原生导航(react-native-screens)
  • 在导航到昂贵屏幕之前预加载它们

高:原生性能

分析原生层:

  • iOS:Xcode 工具 → 时间分析器
  • Android:Android Studio → CPU 分析器

常见修复:

  • 对繁重的原生工作使用后台线程
  • 优先使用异步而非同步的 Turbo 模块方法
  • 对跨平台的性能关键代码使用 C++

参考文档

包含代码示例的完整文档位于 references/

JavaScript/React (js-*)

文件 影响 描述
js-lists-flatlist-flashlist.md 严重 使用虚拟化列表替换 ScrollView
js-profile-react.md React 开发者工具分析
js-measure-fps.md FPS 监控和测量
js-memory-leaks.md JS 内存泄漏排查
js-atomic-state.md Jotai/Zustand 模式
js-concurrent-react.md useDeferredValue、useTransition
js-react-compiler.md 自动记忆化
js-animations-reanimated.md Reanimated 工作台
js-uncontrolled-components.md TextInput 优化

原生 (native-*)

文件 影响 描述
native-turbo-modules.md 构建快速的原生模块
native-sdks-over-polyfills.md 原生与 JS 库
native-measure-tti.md TTI 测量设置
native-threading-model.md Turbo 模块线程
native-profiling.md Xcode/Android Studio 分析
native-platform-setup.md iOS/Android 工具指南
native-view-flattening.md 视图层级调试
native-memory-patterns.md C++/Swift/Kotlin 内存
native-memory-leaks.md 原生内存泄漏排查
native-android-16kb-alignment.md 严重 针对 Google Play 的第三方库对齐

打包 (bundle-*)

文件 影响 描述
bundle-barrel-exports.md 严重 避免使用桶模块导入
bundle-analyze-js.md 严重 JS Bundle 可视化
bundle-tree-shaking.md 死代码消除
bundle-analyze-app.md 应用大小分析
bundle-r8-android.md Android 代码缩小
bundle-hermes-mmap.md 禁用 Bundle 压缩
bundle-native-assets.md 资源目录设置
bundle-library-size.md 评估依赖项
bundle-code-splitting.md Re.Pack 代码拆分

搜索参考

# 按关键字查找模式
grep -l "reanimated" references/
grep -l "flatlist" references/
grep -l "memory" references/
grep -l "profil" references/
grep -l "tti" references/
grep -l "bundle" references/

问题 → 技能映射

问题 从何处开始
应用感觉缓慢/卡顿 js-measure-fps.mdjs-profile-react.md
过多重渲染 js-profile-react.mdjs-react-compiler.md
启动慢 (TTI) native-measure-tti.mdbundle-analyze-js.md
应用体积大 bundle-analyze-app.mdbundle-r8-android.md
内存不断增长 js-memory-leaks.mdnative-memory-leaks.md
动画掉帧 js-animations-reanimated.md
列表滚动卡顿 js-lists-flatlist-flashlist.md
TextInput 延迟 js-uncontrolled-components.md
原生模块慢 native-turbo-modules.mdnative-threading-model.md
原生库对齐问题 native-android-16kb-alignment.md

致谢

基于 Callstack 的“React Native 优化终极指南”。

📄 原始文档

完整文档(英文):

https://skills.sh/callstackincubator/agent-skills/react-native-best-practices

💡 提示:点击上方链接查看 skills.sh 原始英文文档,方便对照翻译。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。