360度全方位观测:React Native与Flutter的跨平台王位之争
做者 | Krissnawat Kaewsanmuang译者 | 王强编辑 | Yonie
html
咱们身处科技高速发展的时代;互联网突飞猛进,移动应用程序开发产业也在大踏步前进。多年来,移动应用的市场需求呈爆发式增加;众多企业都在开发本身的移动应用程序,或者用于促销本身的产品,或者用来向客户提供更好的服务。前端
众所周知,主导全球市场的两大移动平台分别是 iOS 和 Android。当一家企业决定开发本身的移动应用时,他们须要分别为 iOS 和 Android 平台部署功能相同的应用程序。为此,开发人员须要学习两个平台的不一样语言和开发流程,从而在两大平台上构建表现基本一致的应用版本。为了解决这个问题,跨平台框架应运而生,帮助开发者构建可同时适用于 iOS 和 Android 平台的移动应用。现在最流行的两大跨平台应用开发框架就是 React Native 和 Flutter。react
跨平台框架发展历史谷歌和 Facebook 的竞争关系始于 Web 产业。谷歌的 AngularJS 是 Web 应用开发市场中最流行的 Javascript 框架之一。与此同时,由 Facebook 构建的 React 则是在 Web 应用程序开发流程中普遍应用的 JavaScript 库。通常认为 Angular JS 和 React JS 是 Web 社区中的一对热门竞争对手。不久前,随着市场对跨平台移动应用程序的需求开始增长,Facebook 推出了用于构建跨平台移动应用程序的 React Native 平台。不久谷歌也推出了 Flutter 予以正面回应。git
React Native:2015 年 3 月 Facebook 正式发布了 React Native。github
Flutter:谷歌于 2019 年 5 月正式推出 Flutter。编程
Flutter 进入这一领域的时间较晚。在 Flutter 崛起以前,React Native 已经在移动应用程序开发社区中名声大噪。小程序
架构选择任何开发框架时必需要考虑不一样框架的基础架构,React Native 和 Flutter 在这方面有很大区别。react-native
React Native:它基于 Facebook 本身使用的 Flux 架构。它的设计理念是一种称为 Javascript 桥的 JS 运行时环境。这种桥是用来同原生线程通讯的。RN 的代码用 Javascript 编写,而后在运行时编译为原生代码。前端工程化
Flutter:Flutter 使用 Dart 框架,后者又使用 Skia C++ 引擎。相比 React Native 的 Flux 架构,Dart 框架不须要任何桥接工具来通讯,由于它已经内置了所需的大部分组件。它的体积相对更大一些。Skia C++ 引擎提供了所需的各类协议、通道和组合。安全
与 Flutter 相比 React Native 的架构性能较差,由于后者使用了 Javascript 桥。Flutter 的架构五脏俱全,功能完善。
编程语言对于开发人员来讲,开发任何应用程序都首先要考虑所使用的编程语言。市面上存在许多编程语言,大多数开发人员也掌握多种编程语言的技能。下面来对比一下 React Native 和 Flutter 中使用的语言。
React Native:React Native 中使用的编程语言是 Javascript。Javascript 是世界上最流行的语言之一,也是万维网(WWW)的 三大核心技术之一。
Flutter:相比之下,Flutter 使用的 Dart 语言既不受欢迎也没那么流行。Dart 语言诞生于 2011 年,由谷歌推出。Dart 很是简单易学,由于它支持大多数面向对象的理念。
稍微懂一些 Web 开发的人就会了解 Javascript。它是最流行的语言之一。大多数 Web 框架,如 Angular、React、Vue 等也都是用 Javascript 构建的。但 Flutter 使用的 Dart 语言还很年轻。它在编程社区中不为人知。
安装选择好框架以后,开始工做的第一步就是安装框架。一般来讲这是一个使人头痛的问题,对新手而言尤为如此。React Native 和 Flutter 的安装流程也是不同的。
React Native:开发人员须要使用 Node 包管理器(亦即 NPM)在 Windows 或 Linux 中安装 React Native。熟悉 JavaScript 的开发人员天然也会熟悉 NPM,毕竟这是每天都会用到的工具。NPM 支持本地或全局安装,具体取决于用户的选择。对于 macOS 来讲,除了 NPM 还须要 Homebrew 包管理器。
Flutter:安装 Flutter 不须要任何软件包管理器。它能够直接从 GitHub 下载到指定的平台上。在 macOS 系统中咱们须要设置路径。
使用 NPM 很是简单。即便对不用 JavaScript 后台开发人员来讲,NPM 学起来也很容易,只需在命令行中输入几条命令便可。并且 NPM 在 Web 开发领域应用普遍,因此学会它是颇有意义的。相比之下,Flutter 须要先从 GitHub 下载而后才能安装,有几个安装步骤可能会很麻烦。Flutter 还须要某种包管理器才能得到较好的安装流程。
用户界面组件和 API跨平台应用开发框架的重点在于平台对 原生组件 的支持水平。原生组件是原生应用程序的关键所在。另外一大重要因素是 API,合格的框架应该提供良好的 API 用来访问原生模块。
React Native:与 React 同样,React Native 也提供 UI 渲染和设备 API。它严重依赖 第三方模块 来支持原生组件。React Native 的 UI 渲染功能的确很是出色,但它在很大程度上依赖于第三方库。
Flutter:另外一方面,Flutter 拥有丰富的组件可选,如 UI 渲染组件、测试、设备 API 访问、导航、有状态管理等许多库。它几乎不须要任何第三方库。此外,Flutter 还带有用于 Material Design 的小部件。Flutter 还提供了一个名为 Cupertino 的 IOS 风格小部件,用于建立渲染水平更高的应用程序。
React Native 在很大程度上依赖于第三方库提供丰富的组件和 API 访问,这一点有利有弊。开发人员能够自由选择所需的第三方库,但这种选择可能也会成为一种负担。而 Flutter 附带了建立跨平台移动应用程序所需的全部组件类型,开发人员使用 Flutter 时无需寻求任何第三方库。
社区支持任何技术的发展过程当中社区都起着相当重要的做用。现在,开发人员自发造成社区并分享他们正在研究的技术的相关知识。在社区中分享开发经验和解决问题的技巧是颇有意义的。
React Native:自 2015 年正式发布以来,React Native 蓬勃发展,广受欢迎。GitHub 上的 React Native 社区很是庞大,每一年都会举办不少线上 / 线下论坛和研讨会。
Flutter:Flutter 最先于 2017 年推出,相比之下还很年轻。它的社区规模还不是很大,但它正在快速增加。谷歌每一年都花很大力气推广这个平台,也举办不少论坛和研讨会。
React Native 很是流行,应用普遍,已经拥有了一个成熟的社区。而 Flutter 还很年轻,没那么受欢迎。但 Flutter 的社区正在快速成长,谷歌在全力推广它。
测试测试是全部开发流程的重要组成部分。任何严肃的技术都带有测试支持。在跨平台移动应用程序开发领域,单元测试、集成测试和 UI 级别的测试等都很是重要。
React Native:React Native 没有不少测试选项。它的确支持初级单元测试,可是当涉及集成和 UI 级别测试时,React Native 仍是须要依赖第三方库。Appium 和 Detox 是 React Native 应用程序经常使用的两种测试工具。
Flutter:Flutter 为单元和集成测试提供了丰富的工具。它还提供了用于测试应用程序的小部件和 UI 的工具。此外,Flutter 针对应用测试等文档支持也很完善。
React Native 依旧要依赖第三方库来作测试,而 Flutter 则提供了许多优秀的测试工具。在测试 Flutter 应用程序时,开发人员不须要寻求第三方库的支持。
CI/CD 支持不论是什么类型的应用程序,不管是 Web 平台也好仍是移动平台也罢,都必须具有持续集成和持续交付的能力。CI/CD 能够用来持续接收反馈并尽可能避免错误。但若是没有完善的文档和资源支持,持续集成和持续交付用起来会很是麻烦。
React Native:React Native 的文档一直都不怎么样,并且在持续集成和持续交付方面根本就没有官方文档。对于开发人员来讲,没有合适的文档就很难使用 CI/CD 了。还好互联网上总有一些资源可供选择。
Flutter:如前所述,Flutter 提供的文档大都很出色。Flutter 的文档专门有一部分具体介绍持续集成和持续交付的设置。
设置 CI/CD 很依赖文档和资源支持。React Native 没有提供任何官方文档,而 Flutter 为 CI/CD 单独提供了详细指南,不只对新手很友好,对有经验的开发者来讲也很方便。
流行程度一项技术受欢迎的程度是影响开发者选择的一个主要因素。毫无疑问,React Native 和 Flutter 都是最受欢迎的跨平台移动应用程序开发框架,可是哪一个更受欢迎呢?
React Native:React Native 在 GitHub 上拿到了超过八万颗星。Github 上的问题还不到六百个。2019 年的今天,React Native 是很是受欢迎的技术,相比几年前影响力加强了不少。
Flutter:Flutter 比 React Native 年轻不少,但它也在 GitHub 上拿到了超过七万两千颗星,只比 React Native 少八千。显然 Flutter 的影响力增加很是迅速,但它在 GitHub 上的问题有超过五千个,比 React Native 多不少。
React Native 在跨平台移动开发社区很是受欢迎,而 Flutter 的影响力也在不断增加。但 Flutter 毕竟更年轻,使用的仍是没那么流行的编程语言,因此处境有点差。
在跨平台移动应用程序开发领域,React Native 和 Flutter 都是最好的选择之一。二者都有本身的优势和缺点。React Native 使用了 Javascript 而且与 React JS 有许多类似之处,因此有许多开发人员选择了它而非 Flutter。Flutter 很年轻,使用的是较新的编程语言。可是 Flutter 带有许多 React Native 缺乏的内置功能。React Native 很大程度上依赖于第三方库,这一点有利有弊。它把选择权都交给了开发人员。
毫无疑问,这两种技术在将来都会是热门选择。
在此处查看React Native 文档: https://facebook.github.io/react-native/docs/getting-started.html
在此处查看 Flutter 文档: https://flutter.dev/docs
英文原文: https://kriss.io/react-native-vs-flutter-2019-comparison/
活动推荐GMTC 全球大前端技术大会首次落地华南,走入大湾区深圳。
往届咱们请到了来自 Google、Twitter、Instagram、阿里、腾讯、字节跳动、百度、京东、美团等国内外一线公司的顶级前端专家,分享了关于小程序、Flutter、Node、RN、前端框架、前端安全、前端工程化、移动 AI 等 50 多个热门技术专题。目前深圳站正式启动,7 折最低价售票通道已经开启,详细请咨询:13269078023(同微信)。