嗯。。。这个问题十分不好回答啊(捋下鱼须)。闲鱼作为flutter领域的先驱者,以及fish_reduxflutter_boost等当红flutter库的作者,当然是欢迎广大的开发者多多使用flutter相关技术栈 逃~:)。咳咳,不过呢,我们还是正经得聊一下React Native(下面简称RN)和flutter之前的异同:

0x00 简单介绍一下

React Native

React Native是Facebook开源的一款基于react思想、使用JS、能够给移动平台带来native般体验的框架,官网最新的版本是0.5.9。

flutter

flutter来自Google,上层使用dart语言构建跨平台应用,通过平台相关的embedded层接入到使用c++编写的engine层,再通过skia库直接与GPU进行交互。通过对dart代码的AOT编译,拥有优异的计算(CPU)、渲染(GPU)性能。官网最新的版本为1.2。

0x01 跨平台性

开发者们使用跨平台技术栈,首要的目的是为了能够省事儿,所以跨平台能力是首先要被衡量的指标。

Build native mobile apps using JavaScript and React

这意味着开发者可以复用庞大的JavaScript生态和优雅的react思想来书写RN的代码,给开发提供很多的便利性。

从实现原理上来说,RN进行完排版之后会把最终的渲染交给native view,这种方式带来的是如native般的UI性能,但同时也给给平台一致性带来了一些问题。除开渲染层的不一致,在iOS和Android没有使用同一个JavaScript虚拟机也会带来一些暗坑。

手势的处理上两个平台不好统一,RN官方也没有提供一个抹平差异的库,虽然开源社区有react-native-gesture-handler。

Beautiful native apps in record time

flutter官方的口气很大,说自己是”空前“的。是不是”空前“,我们得来评估一下。

编程语言层面,flutter使用dart语言构建应用,这门语言对大多数人来说应该是比较陌生,好在dart的语法并不复杂,与Java等强类型oop语言非常相似,还加入了函数式的特性,使用起来还是挺方便的。

flutter提供类似React思想的响应性UI编程模型,让UI开发变得更加fancy。

原理上来说,flutter在各个平台上使用统一的vm(dart vm),自带GDI(skia)。skia是一个已经发展多年成熟度相当高的2D图形库,也是Android系统和Chrome一直在使用的图形库。

flutter从逻辑计算到渲染绘图,都是自己的,使得它在跨平台一致性上有良好的表现。dart提供的AOT特性也可以保证应用在线上有一个好的性能表现。

多平台支持

RN目前支持iOS和Android两个平台,另外有个非官方的ReactNativeX的项目旨在让RN运行到其他平台。

flutter早期支持iOS和Android,desktop的支持目前尚不完善。近期flutter团队发布了Hummingbird,旨在让flutter编写的应用可以运行在浏览器端。

从多平台支持的角度看,两边差距不大。相比RN,flutter在desktop的支持上有些优势,但目前都是不怎么可用状态。

0x02 开发便利性

工具链

RN在打包发布方面有被前端广泛使用的webpack支持,官方自己提供了基于浏览器的debug工具,与前端同学管用的调试方式并无二致。

flutter基于iOS和Android已有的打包工具添加了flutter产物打包功能,同样debug工具也由官方自己提供,除了刚发布的基于浏览器的调试工具外,flutter团队提供的调试工具可以直接在Android Studio或者VScode这类IDE上直接使用。

调试便利性

JS的调试方式已经很成熟了,这里不多做展开。
flutter在debug阶段可以使用集成于IDE插件中的hot reload功能做到亚秒级的新代码加载速度,十分适合与设计师坐在一起结(ya)对(li)编(tiao)程(shi) :)。

第三方库

在RN上你可以使用JS的大部分库,平台相关的plugin也相对丰富。

flutter在这方面稍显欠缺,库的数量上无法与JS生态相比较。flutter/plugins项目提供了大量的平台相关插件供开发者使用,倒也是满足了日常开发的需求,另外dart pubs上的公开库数量也日趋上升。

在混合开发和大型app业务框架上,闲鱼技术开源的flutter_boost提供了与native混合开发的可能,而fish_redux使得大型app中的复杂页面的开发在flutter中变得更加容易。

0x03 未来的发展

开发者选择一个技术,都是压了”身家性命“在上面,谁也不想刚入门就发现这门技术即将被淘汰。

RN是个很好的项目,在发布之初给移动开发带来了一阵旋风。但不得不说,Airbnb宣布放弃使用RN技术栈对于整个社区有不小的打击,而文章中对原因的阐述也相当有说服力。

flutter在1.0发布之后趋于成熟,被钦定为Google Fuchsia系统的应用层框架。从团队2019 roadmap中可以看到,flutter当前重点在于完善一些现有功能上的细节与bugfix,另外对于广受期待的动态化特性,flutter团队也在开发code push功能。从flutter团队目前的方向和笔者在闲鱼开发中实际使用的flutter的感受来看,整体上flutter在框架层面目前已经基本上稳定。

从桌面端跨平台框架发展的历程来看,Java GUI从最初使用peer(对等设计模式)的AWT,到基于Java图形绘制接口性能巨慢无比的Swing,再到公认性能最好目前应用最广泛的基于目标平台绘制接口的SWT,我们可以从中窥见一些历史规律。

peer(对等设计模式),即AWT中的一个控件,对应目标平台(如Windows)上的一个控件(是不是看起来跟RN有一些相似),最终AWT被放弃是因为peer模式传输层级过多造成效率低下,GUI部分为了保证可移植性只能保留各个平台公共的接口。

SWT与QT(另一个被广泛使用的桌面端跨平台GUI框架),牺牲了一部分可移植性(主要是因为直接调用了目标平台的图形绘制接口),带来了GUI的高性能。flutter也采用了类似技术栈,skia来抹平各个平台的绘制接口差异,并向上提供统一的图形接口。

从这个角度来说,无疑flutter可能会是一个更有未来的跨平台框架。

0x04 写在最后

当然Facebook官方对于RN正在进行重构,包括把大部分逻辑移动到c++层来减少线程切换的开销提升性能等。

选择一个框架需要考虑的实际情况比框架的优劣比较更加重要,比如你的项目大小、开发人员构成等,
RN和flutter作为目前移动平台上炙手可热的框架,两者并不是孰优孰劣的对立关系。

纸上得来终觉浅,如果你是个对新技术感兴趣,抑或是希望在移动平台上有所突破的开发者,何不尝试一下Google最新的成果咧?

原文链接
本文为云栖社区原创内容,未经允许不得转载。

开发跨平台app推荐React Native还是flutter?相关推荐

  1. Hybrid App 和 React Native 开发那点事

    版权声明:本文为博主原创文章,未经博主允许不得转载. 简介:Hybrid App(混合模式移动应用)开发是指介于Web-app.Native-App这两者之间的一种开发模式,兼具「Native App ...

  2. [译]哪个跨平台框架才是最好的选择?React Native、Flutter 还是 Ionic

    关注 前端瓶子君,回复"交流" 加入我们一起学习,天天进步 原文地址:React Native vs. Flutter vs. Ionic 原文作者:Sophia Martin 译 ...

  3. 从 React Native 到 Flutter,移动跨平台方案的真相

    转载自「LeanCloud通讯」公众号 作者:LeanCloud 郑鹏 2018 年 12 月,Google 发布了 Flutter 1.0 正式版,似乎再次点燃了人们对移动跨平台开发的热情.上一次出 ...

  4. 混合开发架构|Android工程集成React Native、Flutter、ReactJs

    混合开发架构|Android工程集成React Native.Flutter.ReactJs 架构设计说明 创建安卓原生工程 创建Flutter 集成嵌入原生工程 创建React Native 解决R ...

  5. 如何将React App转换为React Native

    I have been working on a lot of mobile projects lately - including Cordova, PhoneGap, React Native, ...

  6. 利用Qt开发跨平台APP(Android)

    利用Qt开发跨平台APP(Android) 本文将手把手教你如何在Windows环境下,使用Qt编译出安卓应用程序. Qt是一个优秀的跨平台开发工具.我们利用Qt可以很方便地将一次编写的应用,多次编译 ...

  7. React Native 与 Flutter ,一场跨平台世纪之战!

    点击"开发者技术前线",选择"星标?" 13:21 在看|星标|留言,  真爱 作者 | Paresh Sagarg   译者 | 苏本如 谷歌和 Facebo ...

  8. React Native 与 Flutter 的跨平台之战!

    作者 | Paresh Sagarg 译者 | 苏本如,责编 | 唐小引 出品 | CSDN(ID:CSDNnews) 谷歌和 Facebook 当前正在进行的跨平台移动应用开发框架之战(Google ...

  9. 适合做app的前端框架有哪些?webAPP移动端App:react native、weex、flutter

最新文章

  1. 风向2018 | AI 突围
  2. Unsupported compiler 'GCC 4.2' selected for architecture 'i386'错误
  3. eclipse中的debug按钮组突然找不到了,找回方法
  4. python入门需要什么基础知识_Python 基础之:入门必备知识
  5. Linux(Redhat5.5)配置时间服务器(Ntp)法
  6. 数据结构-树2-二叉树各种函数实现
  7. 程序员的mysql经典pdf_程序员的SQL金典 杨中科著 中文 PDF版
  8. rapidminer java_在Java应用程序中集成RapidMiner
  9. 社工查询-最强社工查询网址汇总
  10. 计算机化验中红细胞的测量程序,血液常规检查检验程序.doc
  11. 怎么屏蔽还有照片_在朋友圈发男神照片没屏蔽父母,老妈的回应亮了
  12. ATL SERVER
  13. 梯有N阶,上楼可以一步上一阶,也可以一次上二阶(Java实现)
  14. UltraEdit最新版v27软件下载 程序员必用高级文本编辑器
  15. 【Hive】distinct on different columns not supported with skew in data
  16. oracle中bonus用法,Oracle中scott用户的emp、dept、bonus、salgrade建表代码与数据
  17. 小米8系统推送服务器,小米8推送基于Android 10的MIUI 11开发版
  18. Android平台Fastboot介绍
  19. 支付宝——NBA主题皮肤限时体验,你 Get 了吗,❤️先干为敬❤️
  20. 快递配送管理系统毕业设计

热门文章

  1. java网络篇-tcp的握手和挥手!
  2. python 切片器_PowerBI-将日期显示为星期作为切片器
  3. opengl 安装_一步步学OpenGL(34) -《GLFX,一个OpenGL效果库》
  4. python 支付宝个人账单_金融支付财务融合业务-实践分享1:订单、账单、交易流水、账套知识解构、原理解析...
  5. 【LeetCode笔记】338. 比特位计数(Java、位运算、动态规划)
  6. php 类加载,关于PHP中类的加载
  7. kali linux 桌面消失_kalilinux系统设置不见了的解决方案
  8. python中空字符串的布尔值是什么_Python的布尔值与空值
  9. 王小云:连破两套美国顶级密码,获得711万奖励,美国不淡定了
  10. 三观碎一地:轮子天天见,车轮悖论却2000年无解?