近半年,自己创业做在线教育,近期也打算开发自己的APP,作为一个技术出身的创业者,所以可以在开发APP时自己做技术选型。
但想到还有很多创业者或架构师也面临类似的问题,所以把自己的思考分享给需要的人。
我的客户端经验
笔者2011年毕业于北京交大,2015年下半年开始由操作系统开发转向安卓开发,2016年在搜狐开始使用react-native开发APP。
2017年曾短期在便利蜂参与过三个RN项目的开发,然后去易鑫从事大前端团队的管理,团队开发维护的原生APP,通过搭桥嵌入H5。
2019年初在快陪练负责前端团队,以纯flutter的方式上线了一个iOS版的钢琴资讯APP,且在直播上课APP中的订单模块接入了flutter。
过去半年多,使用uni-app开发了多个跨端小程序,其中uni-app集成了weex跨端APP开发框架,可以一套代码生成h5,各种小程序以及安卓和iOS的原生APP。
不管是原生APP、还是近几年比较热门的RN、weex或flutter跨端开发APP的技术,笔者都在真实项目中使用过。
正因为都用过,所以各自的坑有都进去过,虽然因为学的东西多,导致精力分散,很多技术都是略懂,但是总结一下,相信还是能有一定参考价值的。
移动应用开发的趋势
由于对移动应用的大量需求,很多公司已经把他们应用开发的重心转移到移动应用上了,这是一个不断有更好的技术、平台和框架流入的领域。
移动行业渴望进行一场革命,以遏制移动应用程序开发过程中出现的成本高、耗时长等问题。
因此,该变革以跨平台开发的形式出现。现在,维护代码和开发应用程序对于开发人员来说变得简单且省时。
现在,跨平台应用开发正在创业公司中变得越来越流行,相继出现了多种跨端开发原生APP的技术方案。
除了weex只在阿里系的公司用得多外,react native 和 flutter目前都有大量的公司在使用,并且互相竞争,试图证明自己是跨平台移动应用的最合适的王者。
React native 是 Facebook 2015年开源的,并且很快获得了大众的欢迎。而Google 的 flutter 则是这两年才火起来的新技术,它优势是更好的性能。
不仅对于资金紧张的初创公司,即使是大公司的新项目,初期都需要快速验证产品的可行性,因此多数公司都不会选择原生开发,而是基于跨端技术。
那么对于开发者来说,应该选用哪个跨平台应用程序开发框架比较好呢?
由于采用react native 和 flutter 的技术栈项目最多,所以本文主要分享我作为创业者在做客户端技术选型时,最后采纳的是使用RN还是flutter的过程。
react native vs flutter
环境搭建
从当前两个框架的最新版本来看,搭建原生开发环境都是比较复杂的,相对来讲,flutter要容易一些,特别是搭建Android开发环境。
编程语言
React Native 允许你使用 Javascript 开发应用程序,通过简单配置也可以使用微软维护的Typescript 语言进行开发,克服JS作为动态语言的一些不足。
由谷歌开发的 Flutter 提出了一种名为 Dart 的新编程语言。它对于开发人员来说是新手,但是那些具有 OOP 语言经验的人,比如 C ++ 和 JAVA,可以很容易地学习的。
IDE 和易于编码
如果我们讨论 React Native 的 IDE,那么它几乎支持所有领先的 IDE。然而,Flutter 受 Android studio / IntelliJ 和 visual studio 代码支持。
代码结构
Google 的 Dart 没有模板、样式和数据文件的分离,因此代码变得有点难以理解。
而 Javascript 遵循简单的代码结构,因此开发人员更清楚地理解和编写代码。
性能
因为 React Native 通过 JS 桥接原生控件,所以再渲染上肯定不如有一套自己的渲染机制flutter,但肉眼所看的性能体验基本没区别。
总而言之,除了React Native 列表性能比较差外,两个平台的性能都有些接近。
稳定性
这两个平台都得到了领先技术社区的支持,因此对稳定性毫无疑问,两者都有很好的稳定性。
我们的决定
客观讲,flutter是google的亲儿子,如果目标用户是安卓居多的话,使用flutter 都比使用Android原生开发要好,因为官方IDE都在大力推进安卓开发人员使用flutter。
而react-native 虽然不是Google官方提供的,但由于其中立性,所以对两个平台的支持都差不多,且由于一开始只有iOS版本,所以iOS的开发上更友好。
由于我们公司未来长远的业务是少儿编程,而此核心系统就是基于react开发的,为了复用我们的前端人力,选择react-native 更合适。
并且由于react-native支持热更新,这样就避免了用户需要频繁下载安装APP的最新版本了。虽然flutter也可以实现安卓端的热更新,但是不稳定且不是官方支持的。
同时,笔者手上有大量的react-native项目可以参考,所以使用react-native开发我们的APP是最好的选择,未来如果性能不满足要求了,再考虑使用flutter。