PCon全球产品创新大会最新日程上线,这里直达 了解详情
写点什么

2021 年,Flutter 与 React Native 该如何选择?

  • 2021 年 4 月 19 日
  • 本文字数:2619 字

    阅读完需:约 9 分钟

2021年,Flutter 与 React Native该如何选择?

2021 年,跨平台程序员之间关于 React Native 和 Flutter 的旷日持久的争论越来越白热化了。前几年,React Native 还是开发人员的首选框架,但是自 2017 年 Flutter 发布以来,其已经发展成为 React Native 的一个强有力竞争对手。


最近,随着许多初创公司选择了 Flutter 用于 MVP 开发,React Native 正在面临来自 Flutter 的激烈竞争。那么问题来了,哪种应用开发技术将在 2021 年取得成功呢?


Flutter 应用的优势


1. 热重载 = 快速编码


Flutter 允许开发人员使用一种更复杂、更快速的方式来创建应用程序。这是 Flutter 的最大优势之一,也是所有顶级移动应用开发公司都颇为看重的。


开发人员可以实时对代码库做出改进,并立刻看到这些改进反映在请求中。这就是所谓的“热重载”特性,更改通常只需几毫秒就能显示出来。


这一功能让团队可以快速添加功能、修复错误和测试新想法。此外,当团队需要通过协作来加快开发速度时,热重载用起来非常顺手。


2. 适用于多个移动平台的单一代码库


Flutter 允许开发人员为两个应用只编写一个代码库——一个针对 iOS,另一个针对 Android。因为 Flutter 具有自己的模板和布局,它的操作系统无关的平台意味着开发人员可以在两个不同的系统上使用相同的功能,同时保持每个应用都有自己独特的样式、可用性和功能。


Flutter for Web 是由谷歌开发的,为开发人员提供了必要的信誉保障。一旦应用程序上线,就可以用单个代码库支持 Android、iOS 和 Web 平台。


3. 与 React Native 相比,需要的测试只有一半


由于你将在两个平台上测试相同的程序,因此质量保证流程做起来会快得多。我们编写了的自动化测试量只有一半,因为在两个平台上可以编写相同的测试,这样就最大程度地减少了质量检查团队的工作量。


但是,由于你的质量检查专家必须手动检查每台设备上的应用,因此需要进行与原生编程相似级别的手动测试。

为什么有人会更喜欢 React Native 而不是 Flutter?


1. 快速刷新 = 快速编码


它具有与 Flutter 相同的特性。热重载加快了开发过程,并允许程序员将新代码直接插入正在运行的应用程序中。这样开发人员无需重新构建应用程序即可立刻看到改进。


热重载可以保留应用程序的状态,并避免了在完全重载期间丢失它的风险(就基于状态的框架而言,这是一大优势)——这进一步加快了移动应用程序成长的速度。


2. 一个代码库,两个移动平台(甚至更多!)


就像 Flutter 一样,你只需编写一个代码库即可运行两个应用程序,一个跑在 Android 上,一个运行在 iOS 上。更好的一点是,因为用的是 JavaScript,所以你在开发跨平台应用程序时可以和 Web 应用共享代码。你只需使用可对特定平台编译的抽象模块即可。


请参阅以下示例,了解可让你同时在 iOS 和 Android 及其他系统(包括 Web 和桌面应用)上编程的库:


React Native for Web 是一个跨平台应用,支持 Android、iOS 和 Web(Twitter 使用它来创建 Twitter Lite)。


ReactXp——Skype 开发的一个应用,支持 Android、iOS、互联网和 Windows 10(UWP)。


微软团队为所有 Windows 10 用户(PC、平板电脑、二合一、Xbox、混合现实设备等)创建了 React-native-windows。


React Native 程序员对事物的看法和采取的行动与大多数人是不同的。


你可以假设 Web 桌面应用、移动 Web 应用和原生应用都具有相同的业务逻辑,但是它们需要不同的 UI 才能满足不同的用户需求。


3. 它使用了流行的编程语言——JavaScript


React Native 使用的是 JavaScript 这种常用的编程语言,而 Dart 尚不为人所知。如果你是喜欢统计数据的开发人员,也可以使用 TypeScript(一个 JavaScript 的超集)。


4. 开发者的选择自由


开发人员可以使用 React Native 开发跨平台应用程序。


优势在于,React Native 允许你根据项目需求和开发人员的偏好来精确选择要使用的解决方案。


例如,如果开发人员需要处理全局状态(如何在单个应用程序中存储和管理多个组件使用的数据),则他们可以使用自定义用户界面库或编写自己的用户界面库;他们可以使用库路由器,或在 JavaScript 和 TypeScript 做出选择。

选择一种框架之前要考虑的事情


对很多人来说,Flutter 比 React Native 更难学习。React Native 在开发人员中很流行,因为它使用了 JavaScript 这种著名的编程语言。因此,如果你是 Dart 的新手,学习 Flutter 的时间可能比学习 React Native 的时间更长。但反之亦然:如果你以前曾用过 Dart,那么学习 Flutter 将会很容易。


由于 React Native 中的组件非常简单,因此设置它们的样式时你必须付出很多工作。只有少数几个模块可以识别平台,并且几乎都需要为 iOS 和 Android 应用不同的特性,或者设置不同的样式。


另一方面,Flutter 将组件视为小部件,此外,这些小部件基于 Material Design,所以可以高度自定义。大多数小部件都是自适应的,这意味着它们可以同时在 Android 和 iOS 上使用。


Flutter 在性能方面具有优势,因为它可以编译为 ARM 或 x86 原生资源,因此非常快。


React Native 只是原生方法的包装,也就是说它架起了一座桥梁,将某些调用转换为原生 API;当存在许多原生调用时,这就会成为瓶颈。


React Native 没有转换为原生代码,它还有 JavaScript 层,而渲染这些代码的性能要比 Flutter 低。这里有一些解决方法,但是 Flutter 就用不着操心这些,因为视图层就像游戏一样简单——而且,由于 Flutter 工程师构建了所有组件,因此对桥梁的原生调用更少,因为它们只是原生视图的包装。


使用 React Native 组件将无法获得足够的自定义能力。因此,如果有人选择不包装一个进程,就无法使用它(例如,视图周围的虚线框将不起作用)——并且来自谷歌和苹果的新组件需要很长时间才能出现在 React Native 中。


React 的 bug 修补也开始需要更长的时间。例如边界破裂问题,以及支持不同风味的问题,等等。大多数 React Native 公司正在制作定制的分叉来修复上游未修补的 bug。Flutter 开发人员更加谨慎,修复往往很快。到最后你可能把大部分时间花在 React Native 文档中,查找各种问题,试图找出事情没有按预期进行的原因。

总结


我们希望本文中的信息能帮助你确定以下问题的答案:“Flutter 还是 React Native,哪个更好?”就一般共识而言,谷歌的 flutter 将继续作为 SDK 存在,并且可能在未来几年内取代 React Native 的地位。如果在未来技术的重要性变得更大,那么在选择最佳解决方案的同时紧跟趋势是非常重要的。


原文链接:


https://hackernoon.com/flutter-vs-react-native-what-to-choose-in-2021-ik1n35ta?source=rss

2021 年 4 月 19 日 15:037760

评论 5 条评论

发布
用户头像
翻译的真烂
2021 年 04 月 21 日 18:19
回复
用户头像
flutter 很容易上手 ,底层架构不一样, 注定像flutter的框架 会越来越流行
2021 年 04 月 20 日 09:00
回复
用户头像
阻碍flutter超越RN的原因应该就是热更新了。
2021 年 04 月 20 日 08:08
回复
2021 年 04 月 21 日 11:29
回复
用户头像
还是原生最香
2021 年 04 月 19 日 17:57
回复
没有更多了
发现更多内容

还有高仿项目吗

GitHub指北

大数据中流量分析常见分类

大数据技术指南

大数据 28天写作 3月日更

好想做个女孩子,编程第一步,女装身上穿

GitHub指北

正则表达式的使用与匹配原理解析

Guanngxu

正则表达式

在离开新手村后,你该如何的走出呢?打造属于你的快与慢的能力。

叶小鍵

架构 idea

型火🔥

架构 原则 架构之道

工作多年后我更明白了UT的重要性

你呀不牛

《码农歌》

臧萌

加班

(继续码字) 因果有顺序吗?是一种必要充分条件吗?

mtfelix

28天写作 bewriting 胡思乱想

探索 Snabbdom 模块系统原理

pingan8787

JavaScript Vue Web Vue 3 Snabbdom

Spark详细剖析

五分钟学大数据

大数据 spark 28天写作 3月日更

Java8中的 Stream 那么彪悍,你知道它的原理是什么吗?

Java小咖秀

Java 面试 stream java8 开发

避免失控:谈谈人与人交往中的恶

boshi

职场 心理 七日更

一些人的某些目标

sadhu

生涯规划 职业规划 个人提升

MongoDB中的null类型查询

Kylin

mongodb 3月日更 21天挑战 数据库查询 NoSql查询语法

新年上班第一天生产环境分布式文件系统崩了!!

冰河

高可用 分布式存储 fastdfs 可扩展 无限扩容

领域驱动设计101 - 通用语言

luojiahu

领域驱动设计 DDD

分享18个常用的ECMAScript 6代码片段

devpoint

reduce URL参数解析 Form表单数据解析

Vue3源码 | createApp都干了什么?

梁龙先森

源码分析 大前端 Vue3

JVM - 类加载器

insight

3月日更

【LeetCode】矩阵置零Java题解

HQ数字卡

算法 LeetCode 28天写作 3月日更

远程协助软件向日葵分析

lenka

3月日更

前端开发:Vue启动项目报错ValidationError:webpack Dev Server Invalid Options

三掌柜

vue.js 大前端 3月日更

uni-app跨端开发H5、小程序、IOS、Android(四):了解uni-app项目结构

黑马腾云

html5 微信小程序 uni-app android iOS Developer

Seldon使用(一):简介及入门

托内多

tensorflow kubeflow Kubernetes PyTorch seldon

科技强国的使命召唤中,百度AI埋下三根未来“引线”

脑极体

Wireshark数据包分析学习笔记Day17

穿过生命散发芬芳

Wireshark 数据包分析 3月日更

源码分析-Netty: 高性能之道

程序员架构进阶

Netty RPC 源码剖析 28天写作 3月日更

Python PyAutoGUI 库

HoneyMoose

FISCO BCOS 开发环境节点搭建 | 联盟链开发(一)

李大狗

区块链 联盟链 FISCO BCOS 狗哥

控制台的安装与使用 | 联盟链开发(二)

李大狗

联盟链 FISCO BCOS 狗哥

ShadowRealm 与微前端沙箱

ShadowRealm 与微前端沙箱

2021年,Flutter 与 React Native该如何选择?-InfoQ