时至今日,React Native 与 Flutter 已经成为两大领先跨平台开发框架。这两套框架之所以极具人气,是因为它们不仅能够简化开发、代码重用等常规工作,同时提供高度原生化的界面外观以及强有力的技术支持。
虽然二者的价值主张相似,但有很多方面仍存在不少差别。双方都能帮助开发人员更快、更轻松地构建并发布应用程序,但作为成熟度更高的框架选项,React Native 的社区规模更大;而 Flutter 则提供更多内置工具,可帮助用户减少对第三方工具的依赖。
我之所以更倾向于 Flutter,当然是觉得它在很多方面比 React Native 的表现更好。在解释具体原因之前,咱们不妨先聊聊这些框架的基本情况,以及它们分别适合处理的应用项目类型。
React Native
React Native 是由 Facebook 公司于 2015 年开发并发布的。这是一套开源跨平台应用程序开发框架,适用于移动及 Web 等多种应用程序项目。
自 React Native 以来,其普及的脚步就一直势不可挡,并成为当前开发者群体中最受欢迎的框架之一。根据 Statista 发布的一项研究,截至 2020 年,约有 42% 的开发者更喜欢使用 React Native 构建跨平台应用程序。
从简单的跨平台应用程序到应用原型设计、原生应用项目以及 Web 应用等等,React Native 的身影广泛出现在各类场景。由于它允许开发人员重用组件及即用型代码,React Native 完全能够满足各类开发项目的需求。
Flutter
Flutter 是由谷歌开发的强大开源应用开发框架,于 2017 年正式亮相。Flutter 不仅可用于构建跨平台移动应用与 Web 应用,同时也可用于构建桌面应用程序。
除了代码库可重用性这一核心价值主张之外,Flutter 在其他方面也有着自己的独特亮点。例如,它可以对接功能强大的 UI 设计套件、使用面向对象的编程语言 Dart 并提供功能强大的内置工具集。根据前文提到的 Statista 研究报告,Flutter 目前在 39% 的开发者中被评为首选跨平台应用程序开发框架。
尽管 Flutter 相对较为年轻,但其人气上涨速度很快。而且根据不少行业专家的说法,Flutter 才是掌握跨平台应用开发未来的关键所在。Flutter 还支持 Material Design,可对操作系统级功能进行访问,并拥有良好的 MVP 应用构建能力。
为什么我更倾向于 Flutter
一段时间以来,React Native 一直是全球领先的跨平台开发框架。而且在 Flutter 出现之前,React Native 可谓无可匹敌。但 Flutter 实际上提供的功能更多,而且补足了 React Native 所欠缺的不少要素。
UI 组件与内置 API 的丰富 repo
除了跨平台代码可重用性以及对特定于设备的 UI 进行通信之外,Flutter 还附带有丰富的 UI 呈现组件储备。这些开箱即用的组件可以帮助开发人员轻松定制用户界面,且不会对定制化及性能产生任何影响。
相比之下,在使用 React Native 构建应用程序时,开发人员则需要依赖于第三方工具来进行特定于设备的本地 UI 渲染,这可能会影响到最终性能以及定制化设计的实现范围。
另一方面,Flutter 可以提供内置组件以访问 API、导航元素、状态管理、应用程序测试以及其他实用度极强的 repo,而不必依赖于第三方 API 及 React Native 等工具。这种对原生模块的访问能力,正是我个人喜爱 Flutter 的核心原因。
缩小应用体积
对于多数应用项目,开发人员总是希望应用体积能够越小越好。体积更大,意味着用户等待下载的时间更长、占用的存储空间更大,而这一切都会给应用的人气乃至下载量产生负面影响。在这方面,Flutter 的表现同样领先于 React Native。
Flutter 应用体积更小,这是因为 Flutter 所使用的 API 与 React Native 使用的 API 相比更小一些。再有,Dart 语言也有助于减少样板代码量并使用更简洁的语法。
开发高性能应用
在应用性能方面,Flutter 同样明显领先于 React Native。在几乎所有性能测试中,Flutter 的性能都比 React Native 更好。
其背后的一大核心原因,在于二者用于同原生组件进行通信的语言有所区别。React Native 需要使用格拉器或中间件才能通过 JavaScript 与原生组件进行通信,而 Flutter 则完全不需要。这不仅可以加快开发速度,更可以优化运行速度。例如,在使用 Flutter 时,应用中动画的运行速率可以达到每秒 60 帧。
对于混合应用开发,在将代码、原生组件以及库集成至新架构中时,React Native 会带来更高的复杂性。Flutter 在这方面也有优势,它能够更轻松地将代码集成至原生平台当中。更重要的是,凭借对 C++ 引擎的支持,Flutter 开发难度也更低一些。
由于 Flutter 应用程序可以直接在原生 iOS 或 Android 平台上进行代码编译,因此与使用其他框架构建应用程序相比,其性能问题要少得多。总而言之,Flutter 应用在速度与性能方面都较 React Native 有着显著优势。
DevOps 项目
DevOps 开发方法目前非常流行,这种更为精简的流程不仅可以节约开发时间,同时也让开发团队得以轻松桥接多种不同功能。同样的,如今的应用程序项目中也广泛采用持续集成(CI)与持续交付(CD)机制,借此避免编码错误并持续根据用户反馈提供更好的输出结果。
关于如何支持这些先进方法,React Native 一直缺少明确的官方 CI/CD 或 DevOps 方法说明文档。相比之下,Flutter 附带有非常详细的说明文档及关于持续集成、测试及开发的专项指南。最重要的是,Flutter 提供丰富的命令行界面,可帮助大家轻松设置持续集成与持续开发环境。
应用开发与发布自动化
我们都知道,在特定平台的商店中发布移动应用往往是个令人头痛的苦差事。而这方面工作在跨平台移动应用项目中,无疑更加困难万分。
React Native 在官方文档中并不提供任何明确的支持或定义步骤,导致开发者找不到得到广泛认可的发布流程自动化指南。在使用 React Native 时,开发人员往往只能以手动操作在相应的应用市场中发布自己的产品。
Flutter 则提供强大且定义明确的命令行界面。通过参考 Flutter 说明文档内的步骤并配合命令行工具,开发人员可以轻松发布并启动应用程序。这种丰富的自动化工具及指导文档储备,正是 Flutter 改善用户开发与发布体验的独门绝技之一。
QA 测试支持
良好的框架还应该集成一套测试框架,帮助开发人员针对移动应用执行单元测试、集成测试与 UI 测试。
尽管 React Native 开发人员可以使用 JavaScript 提供的多种单元测试框架,但这些框架并不具备任何官方测试支持。为了进行测试,React Native 开发者需要依赖于其他第三方工具,例如 Appium。
相比之下,Flutter 提供开箱即用的测试功能,可轻松执行单元测试、功能部件测试以及集成测试。更重要的是,Flutter 还为所有测试提供定义明确的说明文档。
总结
尽管 React Native 与 Flutter 在正面对抗中可谓各擅胜场,但 Flutter 拥有更丰富的内置支持、工具与说明文档选项。其支持的面向对象、语法简单且易于编码的 Dart 语言则进一步扩大了 Flutter 的比较优势。React Native 仍是一套出色的框架,如同其诞生时一样出色,但 Flutter 似乎带来更多不容忽视的价值增益。如何选择,请各位斟酌。
延伸阅读
https://dzone.com/articles/why-use-flutter-over-react-native-for-app-developm