本指南的组织结构
优化 React Native 应用是一个复杂的过程,需要综合考虑多个方面——从实现细节到利用最新的 React Native 特性,再到测试和持续部署。
本指南是一个全面的资源库,汇集了策略、技巧、提示、工具和最佳实践,旨在帮助您打造一个经过优化的 React Native 应用,为用户带来令人满意的体验。
我们不仅专注于 React Native 优化的技术层面,还强调每个技术优化对业务连续性的影响。
本指南包含以下优化方面的最佳实践:
- 稳定性(Stability)
- 性能(Performance)
- 资源使用(Resource Usage)
- 用户体验(User Experience)
- 维护成本(Maintenance Costs)
- 上线时间(Time-to-Market)
上述所有这些方面对您的应用创收效果具有显著影响。每个要素——稳定性、性能和资源使用——都直接关系到用户参与度的提升,从而提高产品的投资回报率(ROI),因为它们对用户体验有着积极的影响。
更快的上线时间能够让您抢占市场先机,保持对竞争对手的优势,而精简的维护流程则有助于降低在该环节的开支。
本指南的结构与涵盖主题
指南分为三个部分:
第一部分: 通过理解 React Native 实现细节提升性能。这部分包含以下主题:
- 注意 UI 的重复渲染
- 为特定布局使用专用组件
- 慎选外部库
- 使用针对移动平台的专用库
- 在原生和 JavaScript 之间找到平衡
- 确保动画以 60FPS 运行
- 用 Rive 替代 Lottie
- 优化应用的 JavaScript 包
第二部分: 利用最新的 React Native 特性提升性能。这部分包含以下主题:
始终使用最新版本的 React Native,以获取最新功能
- 使用 Flipper 更快更高效地调试
- 避免未使用的原生依赖
- 使用 Hermes 优化 Android 应用启动时间
- 使用 Gradle 设置优化 Android 应用包大小
- 试验 React Native 的新架构
第三部分: 通过测试与持续部署增强应用的稳定性。这部分包含以下主题:
- 针对应用关键部分运行测试
- 实现有效的持续集成(CI)
- 借助持续部署(CD)快速发布
- 在紧急情况下使用 OTA(Over-the-Air)更新
- 确保应用始终快速
- 学会为 iOS 应用进行性能分析
- 学会为 Android 应用进行性能分析
每节内容的结构
** 问题 **
本部分将详细描述影响 React Native 应用性能的主要问题,以及这些问题对用户体验和开发效率的具体影响。
** 解决方案 **
本部分概述了该问题可能对您的业务造成的影响,以及解决该问题的最佳实践。
** 好处 **
本部分重点介绍我们提出的解决方案所带来的业务收益。
React Native 优化简介
一切都围绕着 TTI 和 FPS?
等等,这些奇怪的缩写到底是什么?!在考虑优化移动端 React Native 应用时,除了价值主张和用户参与度之外,我们需要承认两个最重要的指标——用户判断我们的应用是否快速流畅的依据——分别是交互时间(TTI,Time To Interactive)和每秒帧数(FPS,Frames Per Second)。
前者(TTI)衡量的是用户多快可以开始使用(或与)您的应用程序进行交互,主要关注启动时的性能。打开一个新的应用程序应该是快速的,这毫无疑问。而后者(FPS)则衡量的是应用程序界面对用户交互的响应速度,主要关注运行时的性能。使用应用程序的过程应该像骑自行车一样流畅——除非您开启了省电模式。优秀的应用程序将卓越的启动性能和运行性能结合起来,为用户提供最佳的端到端体验。
本指南中的几乎每条建议都将直接或间接影响这两个指标。而由于 React Native 为我们提供了构建原生 Android 和 iOS 应用的工具,并在其基础上加入了一些 JavaScript,这使得我们有许多机会可以从不同角度影响这些指标!
值得庆幸的是,大部分繁重的工作已经在框架层面为我们完成了,因此任何 React Native 开发者都可以从一个良好的性能基线开始。然而,随着您的应用变得越复杂,要维持健康的 TTI 和 FPS 基线性能可能会变得越具挑战性。
坦白说,优化并不只是围绕这两个指标。毕竟,如果您的应用在运行时崩溃,您还能测量交互过程中的 FPS 吗?优化是一个复杂且持续的过程,需要在多个层面不断进行,才能让产品取得成功。随着您深入阅读本指南,您将更清楚地了解哪些因素会影响用户体验、哪些因素对提供和感知更好的性能至关重要、为什么重要,以及如何解决阻碍用户在使用您的 React Native 应用时享受最佳体验的各种挑战。
React Native 负责渲染,但性能仍是关键。
使用 React Native,您可以创建组件来描述界面的外观。在运行时,React Native 会将这些组件转换为平台特定的原生组件。与其直接与底层 API 对话,您更关注的是应用程序的用户体验。
然而,这并不意味着所有使用 React Native 开发的应用程序都同样快速,或者能够提供相同水平的用户体验。
每种声明式方法(包括 React Native)都建立在命令式 API 之上,这需要特别注意。
当您以命令式方式构建应用程序时,您会仔细分析每个对外部 API 的调用点。例如,在多线程环境中编写代码时,您会在特定线程中安全地编写代码,同时清楚地了解代码运行的上下文以及其需要的资源。
尽管声明式和命令式方法在实现方式上存在诸多差异,但它们之间也有很多相似之处。每个声明式的抽象都可以被分解为若干命令式的调用。例如,React Native 在 iOS 上渲染应用程序时使用的 API,与原生开发者自己使用的 API 是相同的。
React Native 统一了性能,但并不保证性能无忧!
虽然您无需担心底层 iOS 和 Android API 调用的性能问题,但您如何组合组件却可能产生巨大的影响。您所有的组件都会提供相同水平的性能和响应能力。
但“相同”是否等于“最佳”?答案是否定的。
这就是我们的清单发挥作用的时候。充分利用 React Native 的潜力。如前所述,React Native 是一个声明式框架,负责为您渲染应用程序。换句话说,您无需指定应用程序的渲染方式。
您的任务是定义 UI 组件,其他的交给框架处理。然而,这并不意味着您可以理所当然地忽略应用程序的性能。为了创建快速且响应迅速的应用程序,您需要以 React Native 的方式思考。您必须了解框架如何与底层平台 API 进行交互。
如果您需要在性能、稳定性、用户体验或其他复杂问题上获得帮助,请联系我们!
作为 React Native 核心贡献者和社区领袖,我们将很乐意为您提供帮助。