【移动架构】Flutter和React Native:最后的PK

news2024/11/25 2:53:06

首先,有点离题。做出决定的最简单方法是回顾历史。让我们沿着怀旧之路走一趟。早在2000年初,JAVA就有两个UI框架。一个是AWT,它是一种为多个操作系统构建UI的方法,同时仍然保持操作系统的外观。

每个操作系统都有自己的组件,这些组件映射回使用AWT框架创建的AWT组件。

Java随后决定开发自己的渲染组件库Swing。Swing所做的是处理自己的渲染

依赖底层操作系统组件的风险。Swing得了这场战斗,不久AWT就从地球上消失了。

975a6dd4b1a9c287db81b2a9a5932664.jpeg

这有什么关系?我为什么要离题?

如果您一直在关注React Native vs Flutter 的辩论,您应该很熟悉这一点。React Native 组件被传输到IOS或android组件,而Flatter使用自己的渲染引擎(基于称为SKIA的2d渲染引擎)渲染自己的UI。(类似于游戏引擎自己进行渲染的方式)。它仍然依赖于材料设计(Android风格)和Cupertino(苹果风格)

小部件模仿本机平台像素完美的外观和感觉。如果我们回顾一下Swing与AWT之战作为参考,那么Flutter 可能会在这里获胜。

第一轮:Flutter

我又离题了,但传统上基于操作系统的开发是基于小部件的,而基于浏览器的开发依赖于模板和DSL。尽管WPF/Silverlight等异常试图将相同的模板机制(XAML)引入操作系统,但它们已经多次失败。

开发人员需要什么?

React Native有一个使用React Underthe hood的绝妙策略,它允许您转移现有的React开发者技能集。颤振使用Dart,这是一种新时代的语言,具有更陡峭的学习曲线(主观),尽管它是一种更好的UI开发语言。[6]

在“人才大战”和“大辞职”的时代[2],这比以往任何时候都更为重要,因为你不能指望雇佣最好的开发人员并让他们永远被占用。它比以往任何时候都更有意义保持你的技术堆栈精简,而不是分散在不同的技术。

第二轮:React Native

那么移动和网络上的通用代码库呢?

啊哈,圣杯。有两种方式来看待这个问题。React Native开始考虑利用React开发者技能集进行移动开发。在抽象屏幕和组件的同时,有一些简单的方法可以维护用于状态管理和行为的单个代码库。[5]

微软还发布了一个伟大的项目,允许您使用React Native for the web。[4]

另一方面,Flutter 将传输到web的JS。任何透明都是不好的,因为它是一个泄漏的抽象[3]。(记住GWT)。我对漏洞百出的抽象法则的推论是,你永远不应该选择一种可以转换成另一种语言的语言。

Flutter 还可能提供编译到web组装(WASM)的选项,允许在移动和web上使用通用的代码库。WASM将提供支持javascript以外语言的选项

未来在撰写本文时,WASM仍然存在SEO和性能问题,并且还没有为web产品做好准备。苹果承诺在safari中支持WASM。如果苹果足够体贴地为PWA提供全面支持,我们就永远不会做出选择。

尽管关于React Native和它的JS桥已经写了足够多的文章,导致了很多性能问题,但我相信这很快就会得到解决[1]

第三轮:React Native。可能是2023年

受欢迎程度如何?

截至11月11日,

github

Flutter 132K stars
React Native 99.2K stars

Stackowverflow:

7fe3a4a563a27704b554563e1da82e23.png

此外,谷歌的趋势率也比谷歌高。这可能是因为框架的新颖性

d435ea091486f8d9348665e6cb40f972.png

第四轮:没有明显的赢家。

开发人员的生产力如何?

有两种方式来看待这个问题。

JS根深蒂固。Dart是一个相对较新的语言(已经存在10年了),尽管它是一种更好的语言。使用react Native和我们的react技能,起步更快。

一旦您忽略了初始起飞时间,与React Native相比,Flutter上市更快。虽然这是有争议的,但由于每个平台可能需要进行性能优化,我还是让颤振占上风。

总而言之,由于Flutter在框架本身内置了许多开发人员友好性(部署、CI/CD、丰富的组件库、调试、IDE支持),所以它在这里绝对是一个赢家。尽管像Expo、react native paper和fastlane这样的第三方组件确实为react native提供了很多便利。

第五轮:一触即发

最后决定:

如果要利用现有的开发人员技能集,请选择React Native。在当前的人才争夺战中,当你不能总是吸引最好的人才时,这比以往任何时候都更加真实。

如果你想首先成为移动用户,那么就选择Flutter,并且不介意开发两次,一次用于移动,一次用于网络。(目前)而且你没有开发商或现金短缺。它将成为未来单一前端框架的选择。

本文 :https://architect.pub/flutter-vs-react-native-last-word-2021
讨论:知识星球【首席架构师圈】或者加微信小号【ca_cto】或者加QQ群【792862318】
公众号

【jiagoushipro】
【超级架构师】
精彩图文详解架构方法论,架构实践,技术原理,技术趋势。
我们在等你,赶快扫描关注吧。
22827ed66926111043903ad0f6d73bdb.jpeg
微信小号

【ca_cea】
50000人社区,讨论:企业架构,云计算,大数据,数据科学,物联网,人工智能,安全,全栈开发,DevOps,数字化.

57860b4c9b57cfa6517b51c4e30ef5aa.jpeg

QQ群

【285069459】深度交流企业架构,业务架构,应用架构,数据架构,技术架构,集成架构,安全架构。以及大数据,云计算,物联网,人工智能等各种新兴技术。
加QQ群,有珍贵的报告和干货资料分享。

ab27ae980921f6a458a61b074767b73e.jpeg

视频号【超级架构师】
1分钟快速了解架构相关的基本概念,模型,方法,经验。
每天1分钟,架构心中熟。

3c368bfcda92845f9fd6d0c5259a9563.jpeg

知识星球【首席架构师圈】向大咖提问,近距离接触,或者获得私密资料分享。

46be1dfb4d9aa5c56a90b558f1c268dd.jpeg

喜马拉雅【超级架构师】路上或者车上了解最新黑科技资讯,架构心得。【智能时刻,架构君和你聊黑科技】
知识星球认识更多朋友,职场和技术闲聊。知识星球【职场和技术】
领英Harryhttps://www.linkedin.com/in/architect-harry/
领英群组领英架构群组
https://www.linkedin.com/groups/14209750/
微博‍‍【超级架构师】智能时刻‍
哔哩哔哩【超级架构师】

c327b14e99441e19bbce431af3be5da8.jpeg

抖音【cea_cio】超级架构师

d7657f9da85a587c7e482f181d2e002d.jpeg

快手【cea_cio_cto】超级架构师

6d7da5b1651d1711363182541edf5640.jpeg

小红书【cea_csa_cto】超级架构师

6c6a1d07866cc2f51841ad7dbeeda908.jpeg

网站CIO(首席信息官)https://cio.ceo
网站CIO,CTO和CDOhttps://cioctocdo.com
网站架构师实战分享https://architect.pub   
网站程序员云开发分享https://pgmr.cloud
网站首席架构师社区https://jiagoushi.pro
网站应用开发和开发平台https://apaas.dev
网站开发信息网https://xinxi.dev
网站超级架构师https://jiagou.dev
网站企业技术培训https://peixun.dev
网站程序员宝典https://pgmr.pub    
网站开发者闲谈https://blog.developer.chat
网站CPO宝典https://cpo.work
网站首席安全官https://cso.pub    ‍
网站CIO酷https://cio.cool
网站CDO信息https://cdo.fyi
网站CXO信息https://cxo.pub

谢谢大家关注,转发,点赞和点在看。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/622154.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

驱动开发--创建设备文件--控制LED灯

目录 1、手动创建设备文件 2、应用程序如何将数据传递给驱动 3、控制LED灯: 4、应用层控制灯 5、自动创建设备节点 1、手动创建设备文件 cat /proc/devices 查看主设备号 sudo mknod hello(路径:任意的) c/b(C代表字符设备 b代表块设备&a…

华为无线AC双机热备三层组网配置案例

核心交换机: dis current-configuration sysname hx undo info-center enable vlan batch 10 66 88 99 to 100 ip pool vlan10 gateway-list 192.168.10.254 network 192.168.10.0 mask 255.255.255.0 dns-list 8.8.8.8 ip pool vlan100 gateway-list 172.16.100.254 network …

Qt在MySQL中存储音频文件

一、在存储音频视频等大文件时需要以二进制文件进行存储,首先需要了解mysql存储二进制文件的字段类型以及大小: 需要创建数据库中的图片类型为:二进制mediumblob类型,( TinyBlob 最大 255 Blob 最大 65K MediumBlob …

苹果发布会,卧槽,卧槽,卧槽

今天跟二哥在群里聊到苹果的发布会,二哥完整的看了发布会,我随口问一句二哥看完后什么感受。 二哥说「苹果的工业设计还是遥遥领先,交互设计也是一流水准,然后价格也是遥遥领先」。 然后,我今天也抽空看了关于苹果新发…

【算法与数据结构】203、LeetCode移除链表元素

文章目录 题目一、解题思路完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 题目 一、解题思路 思路分析:这道题需要注意一个特殊情况,当删除的是头结点时,直接删除就找不到整个链表。因此我…

2023LRC软件、Adobe Lightroom Classic下载、安装教程

最后附下载地址 LRC简介: Adobe Lightroom Classic(简称LR)是Adobe Creative Cloud大家庭中的一款专业的图片管理和编辑工具,用于专业摄影师、摄影爱好者以及所有不断优化数码影像的人等。其目标是以丰富的功能提供高效、一致的…

03【WebStorm开发工具】

上一篇:02【HTML快速入门】 下一篇:04【】 目录:【HTML5系列教程】 文章目录 三、WebStorm开发工具3.1 WebStorm简介3.2 WebStorm安装3.3 WebStorm基本使用3.3.1 创建项目3.3.2 调整字体大小3.3.3 代码自动补全3.3.4 WebStorm常用快捷键 三…

在Anaconda的虚拟环境中添加环境变量并通过python访问(win/mac/linux)

一、前言 有的时候密码登比较敏感的信息,不方便直接写在代码里有很多变量我想很多project都可以访问到 那这时候使用环境变量是非常合适的了。 二、设置环境变量 以linux为例 直接在internal执行命令 export 变量值通过更改bashc文件 vim ~/.bashrc # 在最后一行加上…

【双向链表】

双向链表 带头双向循环链表的实现1. 函数的声明2. 函数的实现3. 主函数测试 带头双向循环链表的实现 今天我们来实现一下带头双向循环链表,顾名思义,带头就是有哨兵位,哨兵位不是链表的头,它是连接头节点的一个节点,方…

ChatGPT提示词攻略之迭代提示词

当我们在调试程序时,通常很难一次就把程序正常跑起来。这是普遍现象。但我们会借助一些工具和手段,有步骤有流程地去调整程序,最终让程序按照我们想要的样子正常执行。 对于提示词来说也是一样的。当我们向ChatGPT提问时,一开始它…

从操作系统角度了解内存管理

一.内存管理 1.主要功能 内存管理的主要功能有: 内存空间的分配与回收。由操作系统完成主存储器空间的分配和管理,使程序员摆脱存储分配的麻烦,提高编程效率。地址转换。在多道程序环境下,程序中的逻辑地址与内存中的物理地址不可能一致, …

Effective第三版 中英 | 第二章 创建和销毁对象 | 固定资源首选使用依赖注入

文章目录 Effective第三版前言第二章 创建和销毁对象固定资源首选使用依赖注入 Effective第三版 前言 大家好,这里是 Rocky 编程日记 ,喜欢后端架构及中间件源码,目前正在阅读 effective-java 书籍。同时也把自己学习该书时的笔记&#xff0…

接招吧!MySQL 10 连问

文章目录 🍉1. 索引底层采用什么数据结构?为什么不用hash🍉2. B树与B树区别?为何用B树?🍉3. 自增主键理解?🍉4. 为什么自增主键不连续🍉5. Innodb为什么推荐用自增ID&…

Jetpack Compose 中的基础组件

Button 默认样式 Button的lambda块中可以传入任意的Composable组件,但一般是放一个Text在里面 Button(onClick { println("确认onClick") }) {Text("默认样式") }按钮的宽高 如果想要宽一点或高一点的Button,可以通过Modifier修…

chatgpt赋能python:Python平面图制作教程

Python平面图制作教程 Python是一种高级编程语言,也是数据科学和机器学习领域中使用最广泛的编程语言之一。在数据可视化中,Python语言具有优秀的表现力和灵活性,可以为用户展示各种数据可视化方案。这篇文章将重点介绍Python如何制作平面图…

八字诀 · 十年之约

* * * 原创:刘教链 * * * 号外:今天在“刘教链Pro”发表了两篇文章,《一视同仁,SEC起诉Coinbase》和《SEC起诉币安的官方新闻稿》,欢迎关注“刘教链Pro”并阅读。 * * * 隔夜比特币奋力反弹,重新回升至27k…

激发数学思维:GPT-4实证研究探索挑战性数学问题

深度学习自然语言处理 原创作者:wkk 考虑到自然语言在许多科学和工程领域表达的数学问题的丰富性,使用大语言模型(LLM)来解决数学问题是一项有趣的研究工作。今天给大家介绍一篇微软研究院联合欧美高校关于如何使用GPT-4解决数学问题的研究论文。 之前的…

KCC@深圳 邀你共享『升压手电DIY』的创新之旅!

嘿,亲爱的KCC深圳的社区成员们!你们是否曾经梦想过拥有一款强大的手电,能够在黑暗中照亮一切?现在,我将揭开一个让你们眼前一亮的活动——『升压手电DIY』! 在这个充满创意的活动中,我们将带你们…

为什么我们是RISC-V的首选 GPU

谈起 GPU,很容易想到 Imagination。毫无疑问,鉴于 Imagination 在图形处理领域的积累,也成为 RISC-V 的首选 GPU。 凭借 30 多年的 PowerVR GPU,Imagination 非常熟悉图形处理器。在过去的时间里,我们不断创新&#xf…

总结893

学习目标: 月目标:6月(线性代数强化9讲,背诵15篇短文,考研核心词过三遍) 周目标:线性代数强化3讲,英语背3篇文章并回诵,检测 每日必复习(5分钟)…