今天的移动应用程序不仅仅是在服务中检索和发送数据。它们是复杂的状态管理、美观的动画、复杂的导航流程、巨大的数据集的处理、ML模型的推断等等的综合结果。
此外,需要分布在不同团队的多个开发人员来交付和维护这些功能。最近,我们看到React native在应用开发者中的采用率越来越高。Facebook的RN核心团队的伟大愿景使其成为移动应用开发者的首要选择。
使用React原生架构和编写可扩展的React原生应用程序需要很好地理解实践,可以随着应用程序规模的增长而跟上。在这篇文章中,我们将讨论架构高度可扩展的React Native应用的几个技巧。
启用坚实的约束
为了确保应用程序随着范围的扩大而保持性能和可扩展性,团队必须对他们做出的架构决策保持高度警惕。谈到更好的反应式原生应用程序的架构,有一件事会产生巨大的差异,那就是对以下问题有一个很好的答案。"当一个模块发生变化时,会发生什么?"为了确保你的应用程序不会变成一个大泥球,在开发之初就必须建立一套实践和约束。
将应用程序分为较小的、独立的、可单独测试的模块,这对保持开发速度和质量有很大帮助。它还允许团队独立工作,从而形成一个统一的、快速的开发过程,实现无缝部署和增量升级。
主要收获:
- 大型React应用的最佳实践
- 单引擎
- 微前端
React原生架构 - 状态管理
状态管理是当今JS世界中争论最多的话题之一,我们看到有很多状态管理解决方案出现。它是应用程序的一个关键部分,尤其是对于中大型应用程序。
在所有这些解决方案中,决定哪一个是最好的,主要取决于需求和团队的专业知识。选择的重要因素可能是开发人员的经验,围绕一个库建立的生态系统,或社区的采用和支持。
Redux在状态管理方面已经有很长一段时间了,并获得了很多关注。最近Redux ToolKit和RTK Query的发展在很大程度上提升了它的力量。当你的应用更加以API为中心时,React Query是另一个很棒的解决方案。MobX、Recoil和其他一些工具也在兴风作浪,可能更适合你的要求。
工具/库:
代码共享
React最好的部分是它能够将概念和想法从一个平台移植到另一个平台。"一次学习,到处写作 "的座右铭比以往任何时候都更实用。如果React Native应用的基础打得好,它可以让团队在不同的平台上分享巨大的代码库,包括Web和VR。团队还可以利用git子模块,在不同的仓库中共享组件和逻辑。
像expo和react native web这样的库正在为100%的代码库跨网络和移动平台的移植铺平道路。对于中小规模的应用程序来说,这可能是一个理想的省钱方式。
工具/库:
主题设计
有句话说得好,伟大的设计可以带来最好的前端架构。在应用复杂的技术,如单端口和微前端的同时,设计语言可以作为坚实的架构的基石。
一个好的设计系统可以为你的设计和开发团队定下基调。在应用的不同部分使用的组件之间的一致性使开发者能够为每个组件创建更好的API。这使得组件更加可用,并避免随着时间推移产生额外的技术债务。
包裹依赖性
大规模的React Native应用程序通常依赖于大量的第三方库,以帮助他们更快地工作。然而,随着时间的推移,可能会出现这样的情况:一个第三方库不能像我们开始使用它时那样发挥其作用,或者出现了更好的替代品。
在这种情况下,从一个库切换到另一个库可能被证明是一个昂贵的决定。如果有问题的库被广泛用于不同的模块,这种改变会对我们的应用程序造成很大的冲击。将你自己的API包在任何这样的库中,并通过包装器在你的应用程序中使用它们,总是很好的。这在你更换第三方库的情况下是非常有用的。
此外,要警惕的是,过多的抽象会使你的代码变得更加丑陋,所以在引入任何此类抽象时要非常小心和明智。此外,如果用自定义的API来包装依赖平台的库,可以确保平台的可移植性。
保持代码和 repo 的质量
随着应用程序规模的增长,测试的执行变得更加昂贵。因此,最好是提前计划以节省时间,并确保我们的代码中没有任何基本问题(如错别字)。
静态键入和提示可以帮助我们避免基本问题,这些问题可能会吞噬我们的CI资源。当开发者向仓库提交任何代码时,就可以在他们的机器上进行拼写错误、提示、静态类型检查和包审计等问题。Git钩子还可以帮助维护有多个贡献者的大型代码库的代码质量。
你也可以使用git钩子来检查提交信息,使提交历史更可读,并用于生成自动更新日志。
主要收获:
工具/库:
测试
在今天的世界里,"快速移动和破坏 "已经不再是一个可以接受的口号了。基准和期望与日俱增。对于正在高速发展的应用程序,自动化测试是持续成功的最关键步骤。
一位在过去30年中一直从事软件开发的行业专家最近提到,测试仍然是软件开发中最困难的部分。
值得庆幸的是,我们有工具可以使测试成为一种快乐的体验。
对于希望在React Native中开始测试的开发者来说,我们为React Native应用实现单元、集成和e2e测试准备了一份深度指南。
主要收获
工具/库
- Jest- 单元测试
- React Native测试库--集成测试
- Detox- e2e测试
CI/CD
今天,快速移动不仅仅是一种优势,它对企业的生存至关重要。CI/CD让你有能力放心地运送你的应用程序。如果做得好,CI/CD可以大大增加开发和发布的速度。
正如前面所讨论的,对许多开发人员来说,最令人沮丧的因素是闲置和等待进程的完成。将繁琐的任务自动化是符合开发者和企业的最佳利益的,这样开发者就可以进行创新和富有成效的工作。除了允许开发人员更快地交付应用程序和更新,CI/CD还可以消除管理和维护开发机器上不同环境的成本。正如麦肯锡调查报告中提到的。
"拥有强大的持续集成和交付工具的组织,其创新能力提高了65%。
如果你想在React Native应用中利用CI/CD,我们已经为你准备了惊人的指南,为React Native应用全面实施一流的CI/CD。
关键的收获:
工具/库:
性能跟踪
就像我们前面提到的,现在快速移动是一种必要。但这并不容易,即使有了可靠的测试套件和CI/CD,更快的迭代也会导致问题。为了跟踪问题并在使用过程中监测你的应用程序的性能,你可以利用Firebase SDK的性能监测和崩溃分析功能。
关键的收获:
- Firebase性能监控/崩溃分析
- LogRocket崩溃监测
OTA更新
应用程序开发人员面临的最大挑战之一是让用户升级到新版本的应用程序。与网络应用不同,企业对用户使用何种版本的应用控制力较弱。安卓和iOS现在都有库和方法可以在应用的新版本出现时通知用户。React Native In-App Update是一个开源的库,可以包装安卓和iOS的应用内更新。
这对许多应用程序来说可能是有用的,但它本身仍然是不够的。因为大部分的业务和UI逻辑都在React Native应用的JavaScript中,所以可以在空中更新应用。微软CodePush使我们能够在不打扰用户的情况下更新React Native应用的JS包。
主要收获:
开发者体验
开发人员是每个依赖技术的企业的核心。只有当开发人员自身拥有最佳体验时,才有可能提供最佳的用户体验。配备了正确的开发工具和流程的开发人员会更加投入和富有成效。
自动化的重复性工作,如编写骨架代码、实用程序库、单元测试用例和执行测试,为开发人员释放了大量的生产时间。接受人工智能的帮助也可以提高团队的开发速度。
主要收获:
总结
"......只要设计得当,功能就会很便宜。这种方法是艰巨的,但会继续成功"。
随着我们写的代码越来越多,我们预见未来的能力也越来越强。我们从错误中学习,并找到方法以更快的速度提供更多可扩展的产品。在开发之初就打下坚实的基础,可以确保你的代码库在扩展时的可靠性和质量。这个阶段的任何错误都会在未来导致巨大的技术债务。
保持应用程序的开发经验是愉快的,将导致更好的生产力。在应用程序中启用坚实的约束条件将帮助开发人员减少错误,而自动化可以增强你的团队的信心,使他们能够快速交付功能,而不必担心事情会被破坏。所有这些都会带来业务增长和交付给终端用户的更好的体验。