跨平台开发,Flutter还是React Native?

作者 | 胥磊
审校 | 孙淑娟
随着移动应用的不断普及,各个公司都在寻找可以在多种设备上运行的跨平台应用解决方案,这里跨平台主要是指Android/ target=_blank class=infotextkey>安卓和IOS 。统计数据显示:截止2021年6月,安卓以接近73%的份额控制了移动操作系统市场,继续保持其全球移动操作系统的领先地位 。谷歌的安卓和苹果的iOS共同占用超过99%的全球市场份额 。
本文中,我们将比较两个流行的跨平台开发框架:Flutter和React Native,对比分析每个框架的优点和缺点,并探讨哪种框架更适合在2023年使用 。
一、为什么移动应用开发如此受欢迎?移动应用开发是一个稳步增长的业务域,地球上几乎所有的人都有手机,这意味着潜在的用户数量近乎是无限的,同时现在几乎所有的产品都有应用开发的需求 。你可以选择多种方式来设计和构建一个应用,可以使用本地方法如Swift和Object-C来创建iOS应用,JAVA来创建安卓应用,这些都是官方提供支持和功能更新的编程语言 。当然也可以使用跨平台框架如Flutter和React Native 。
二、什么是跨平台应用开发开始之前,我们先解释下“跨平台应用开发”这个术语,其指的是使用一套代码开发的应用可以运行在iOS和安卓上,同时提供近乎相同的功能体验,在这里我们将其分为以下两类 。
1.混合开发混合型应用指的是使用html5、css和JavaScript等前端技术组合开发的应用 。有些代码运行在目标平台的网络视图中,因此在不同的平台上可以共享这些代码(如HTML5、CSS和Javascript) 。WebView就是混合型应用,其使用嵌入式的WebViews来渲染用户界面,而这其中就可以使用HTML5、CSS和JavaScript进行定制化开发 。
WebView应用在访问设备上那些开箱即用的API时会有一些限制,需要额外的工作来实现与原生应用相同的功能,带来的好处也是显而易见的,这些应用天生就是跨平台的,开箱即用可以大大节省开发时间 。混合型应用在两个平台上看起来是一样的,但底层行为却是不同的,这都取决于目标平台的可用API 。例如一个天气应用的程序分别在两个平台上检查当前位置的天气服务API,根据每个平台提供的数据返回不同的结果 。
2.原生开发原生应用指的是使用目标平台(如安卓或iOS)的原生SDK开发的应用 。这些代码只为目标平台所编写,所以不能在不同的平台上共享,而且用户界面也是使用特定平台的组件和库来实现的 。和混合应用相比,原生应用能提供更好的用户体验而且看起来也更加本地化,但它们的开发成本也更高 。由于开发人员需要更多的时间来学习目标平台的API,所以开发新功能就需要更长的时间 。
三、跨平台框架:Flutter和React NativeFlutter和React Native是当今最好的跨平台框架之一 。它们都使用原生的组件来提供可定制的、响应式的UI,同时可以在不同的平台上共享代码 。Flutter框架由谷歌开发,而React Native框架则是由Facebook提供的 。这些科技巨头都拥有非常庞大的团队,负责从SDK到文档、技术支持等一切事务 。虽然Flutter和React Native应用都是原生的,但它们比传统的原生应用开发更具优势,因为它们可以跨平台共享相当一部分代码 。根据Instagram的数据,通过React Native在iOS和安卓之间共享的代码超过90% 。
四、Flutter和React Native的历史Fluttter是在2016年10月的Dart开发者峰会上发布的,这个跨平台的移动应用开发框架为开发者提供了工具,通过使用谷歌自己的Dart语言编写一套代码,可以同时为iOS和安卓构建原生应用 。
相比2018年2月16日Flutter的第一个稳定版本(1.0)问世,React Native起步比Flutter早一些 。虽然它的第一个测试版本在2015年3月就发布了,然而直到2017年3月,才成功脱离测试阶段 。2017年9月5日,React Native在科技巨头Facebook的强力支持下发布了1.0版本 。虽然两者出现时间都相对较晚,但并不影响各个公司对它们的喜爱,React Native已经被Facebook、Instagram、Airbnb和Uber等大公司使用,而Flutter也已经被宝马、丰田、eBay以及谷歌自己的谷歌支付所使用 。
 

跨平台开发,Flutter还是React Native?

文章插图
 
五、Flutter和React Native的比较Flutter和React Native最主要区别是,React Native并没有编译成原生的语言(如Java、Swift、Objective-C),而是简单地运行其JavaScript代码 。而Flutter则将其Dart语言编译成原生语言,这可能会影响性能 。
另一个很大区别就是,React Native使用vanilla JavaScript(除了JSX)来编写组件 。鉴于React Native的动态特性,Facebook的开发人员建议使用Flow或TypeScript来编写代码 。同样对于Flutter,谷歌也推荐使用Dart来编写代码,因为它有自己的一套静态类型 。


推荐阅读