# React Native Best Practices

> 提供 React Native 性能优化指南，涵盖 FPS、TTI、打包体积、内存泄漏、重渲染与动画。适用于涉及 Hermes 优化、JS 线程阻塞、桥接开销、FlashList、原生模块或调试卡顿与掉帧的任务。 Use when this capability is needed.

- Skill: `tomevault-io/react-native-best-practices-2` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add tomevault-io/react-native-best-practices-2`
- Raw SKILL.md: https://api.skillmd.com/api/skills/tomevault-io/react-native-best-practices-2/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Web & Frontend
- Author: tomevault-io (https://skillmd.com/u/tomevault-io)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/tomevault-io/react-native-best-practices-2

---


# React Native 最佳实践

React Native 应用性能优化指南，涵盖 JavaScript/React、原生（iOS/Android）与打包优化。基于 Callstack 的「React Native 优化终极指南」。

## 技能格式

每个参考文件遵循混合格式，用于快速查找与深度理解：
- **快速模式**：错误/正确代码片段用于即时模式匹配
- **快速命令**：Shell 命令用于流程/度量技能
- **快速配置**：配置片段用于设置聚焦技能
- **快速参考**：摘要表用于概念技能
- **深度探索**：完整上下文，包含何时使用、先决条件、逐步、常见陷阱

**影响评级**：CRITICAL（立即修复）、HIGH（显著改进）、MEDIUM（值得优化）

## 何时应用

在以下场景参考这些指南：
- 调试慢/卡顿 UI 或动画
- 调查内存泄漏（JS 或原生）
- 优化应用启动时间（TTI）
- 减少打包或应用大小
- 编写原生模块（Turbo Modules）
- 分析 React Native 性能
- 审查 React Native 代码性能

## 优先级排序指南

| 优先级 | 类别 | 影响 | 前缀 |
|--------|------|------|------|
| 1 | FPS 与重渲染 | 关键 | `js-*` |
| 2 | 打包体积 | 关键 | `bundle-*` |
| 3 | TTI 优化 | 高 | `native-*`, `bundle-*` |
| 4 | 原生性能 | 高 | `native-*` |
| 5 | 内存管理 | 中高 | `js-*`, `native-*` |
| 6 | 动画 | 中 | `js-*` |

## 速查

### 关键：FPS 与重渲染

**先分析**：
```bash
# 打开 React Native DevTools
# 在 Metro 中按 'j'，或摇动设备 → "Open DevTools"
```

**常见修复**：
- 用 FlatList/FlashList 替换 ScrollView 用于列表
- 使用 React Compiler 进行自动 memoization
- 使用原子状态（Jotai/Zustand）减少重渲染
- 对昂贵计算使用 `useDeferredValue`

### 关键：打包体积

**分析打包**：
```bash
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
```

**常见修复**：
- 避免 barrel 导入（从源直接导入）
- 移除不必要的 Intl polyfills（Hermes 有原生支持）
- 启用 tree shaking（Expo SDK 52+ 或 Re.Pack）
- 为 Android 原生代码启用 R8

### 高：TTI 优化

**度量 TTI**：
- 使用 `react-native-performance` 用于标记
- 仅度量冷启动（排除热/预热）

**常见修复**：
- 在 Android 上禁用 JS 打包压缩（启用 Hermes mmap）
- 使用原生导航（react-native-screens）
- 用 `InteractionManager` 延迟非关键工作

### 高：原生性能

**分析原生**：
- iOS：Xcode Instruments → Time Profiler
- Android：Android Studio → CPU Profiler

**常见修复**：
- 对重型原生工作使用后台线程
- 优先异步而非同步 Turbo Module 方法
- 对跨平台性能关键代码使用 C++

## 参考

完整文档与代码示例在 `references/`：

**JavaScript/React (`js-*`)**：js-lists-flatlist-flashlist（CRITICAL：用虚拟化列表替换 ScrollView）、js-profile-react、js-measure-fps、js-memory-leaks、js-atomic-state、js-concurrent-react、js-react-compiler、js-animations-reanimated、js-uncontrolled-components。  
**原生 (`native-*`)**：native-turbo-modules、native-sdks-over-polyfills、native-measure-tti、native-threading-model、native-profiling、native-platform-setup、native-view-flattening、native-memory-patterns、native-memory-leaks、native-android-16kb-alignment（CRITICAL：第三方库对齐用于 Google Play）。  
**打包 (`bundle-*`)**：bundle-barrel-exports（CRITICAL：避免 barrel 导入）、bundle-analyze-js（CRITICAL：JS 打包可视化）、bundle-tree-shaking、bundle-analyze-app、bundle-r8-android、bundle-hermes-mmap、bundle-native-assets、bundle-library-size、bundle-code-splitting。

## 问题 → 技能映射

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

## 归因

基于 Callstack 的「React Native 优化终极指南」。

---
> Converted and distributed by [TomeVault](https://tomevault.io/claim/kunhai-88) — claim your Tome and manage your conversions.
<!-- tomevault:4.0:skill_md:2026-04-15 -->

