主题
调试与性能
调试工具
- Metro:模块打包、Fast Refresh 和构建错误;
- 开发菜单:重新加载、检查元素和开发设置;
- React Native DevTools:组件树、Props、State、Console 和性能分析;
- Android Studio Logcat:Android 原生日志与崩溃;
- Xcode Console:iOS 原生日志、崩溃和启动问题;
- EAS Dashboard:云构建日志和构建产物。
开发环境与生产构建的执行方式和优化程度不同。性能结论、启动速度和原生崩溃应在 release 构建或接近生产的 preview 构建中复现。
Metro 缓存
模块解析异常且依赖与配置确认无误后,可以清理 Metro 缓存:
bash
npx expo start --clear清缓存不是常规修复手段。版本不兼容、错误导入、Config Plugin 缺失或 development build 未重建时,清理缓存不会解决根因。
错误分层
| 阶段 | 常见表现 | 检查重点 |
|---|---|---|
| Metro | 模块找不到、语法错误 | 导入路径、依赖、Babel/Metro 配置 |
| JavaScript 运行时 | 红屏、未捕获异常 | 调用栈、状态和输入数据 |
| 原生启动 | 闪退、黑屏 | Logcat、Xcode、权限与原生配置 |
| 网络 | 超时、连接失败 | 真机地址、HTTPS、服务端与权限 |
| EAS Build | Gradle、CocoaPods、签名失败 | 完整构建日志与首个根因错误 |
渲染性能
- 长列表使用
FlatList,提供稳定keyExtractor,并控制单项渲染成本; - 避免在 render 中创建高成本对象或执行同步计算;
- 只有在重新渲染确实造成问题时使用
memo、useMemo和useCallback; - 状态放在最小必要范围,避免高频状态触发整棵页面树更新;
- 动画优先使用不会持续占用 JavaScript 线程的方案;
- 图片按展示尺寸加载并控制缓存、格式与内存占用。
启动与交互
- 启动阶段只执行首屏必需的初始化;
- 非关键数据和模块延后加载;
- 持久化恢复要设置默认状态和失败回退;
- 大量同步 JSON 解析、循环或加密会阻塞 JavaScript 线程;
- 网络请求应支持取消、超时、重试边界和离线状态。
性能验证
- 在目标 Android/iOS 设备上复现;
- 使用接近生产的构建模式;
- 区分 JavaScript、UI 和原生线程瓶颈;
- 记录修改前基线;
- 每次只验证一个主要变量,确认优化收益未引入交互回归。
