Skip to content

调试与性能

调试工具

  • 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 BuildGradle、CocoaPods、签名失败完整构建日志与首个根因错误

渲染性能

  • 长列表使用 FlatList,提供稳定 keyExtractor,并控制单项渲染成本;
  • 避免在 render 中创建高成本对象或执行同步计算;
  • 只有在重新渲染确实造成问题时使用 memouseMemouseCallback
  • 状态放在最小必要范围,避免高频状态触发整棵页面树更新;
  • 动画优先使用不会持续占用 JavaScript 线程的方案;
  • 图片按展示尺寸加载并控制缓存、格式与内存占用。

启动与交互

  • 启动阶段只执行首屏必需的初始化;
  • 非关键数据和模块延后加载;
  • 持久化恢复要设置默认状态和失败回退;
  • 大量同步 JSON 解析、循环或加密会阻塞 JavaScript 线程;
  • 网络请求应支持取消、超时、重试边界和离线状态。

性能验证

  1. 在目标 Android/iOS 设备上复现;
  2. 使用接近生产的构建模式;
  3. 区分 JavaScript、UI 和原生线程瓶颈;
  4. 记录修改前基线;
  5. 每次只验证一个主要变量,确认优化收益未引入交互回归。

参考资料

基于 MIT 许可发布