Flutter 与 RN对比
Flutter是什么
现在技术更新迭代真的很快,每隔几年就会出现一些新的技术。当然,Flutter出现有有一点时间了,只不过还未真是发布,但是已经有一些人在使用了。这篇文章主要内容来自我在公司内部的一次分享会,所以大部分内容都是提炼。
- Flutter 是由 Google 的工程师团队打造的,用于创建高性能、跨平台的移动应用的框架。
- Flutter 针对当下以及未来的移动设备进行优化,专注于 Android and iOS 低延迟的输入和高帧率
- Flutter的设计跟react-native很像,但是比RN进了一步
- Flutter的开发语言是Dart
移动端跨平台开发技术演进
现在主流的移动开发平台是Android和iOS,之前还有过windows phone,每个平台的开发技术都不太一样。大家都是针对每个平台开发应用。自然有人就会觉得这样效率低下,想进行跨平台开发。从最开始的Hybrid混合开发技术,到RN的桥接技术,到现在新兴的Flutter技术,跨平台开发技术一直在演进。
以往最早的Hybrid开发,主要依赖于WebView。但是WebView是一个很重的控件,很容易产生内存问题,而且复杂的UI在WebView上显示的性能不好。react-native技术抛开了WebView,利用JavaScriptCore来做桥接,将js调用转为native调用,只牺牲了小部分性能获取的跨平台开发,这是一大进步。所以现在react-native很流行的原因。
上图react-native框架原理
Flutter实现跨平台采用了更为彻底的方案。它既没有采用WebView也没有采用JavaScriptCore,而是自己实现了一台UI框架,然后直接系统更底层渲染系统上画UI。所以它采用的开发语言不是JS,而Dart。据称Dart语言可以编译成原生代码,直接跟原生通信。
上图是Flutter框架原理图
Flutter将UI组件和渲染器从平台移动到应用程序中,这使得它们可以自定义和可扩展。Flutter唯一要求系统提供的是canvas,以便定制的UI组件可以出现在设备的屏幕上,以及访问事件(触摸,定时器等)和服务(位置、相机等)。这是Flutter可以做到跨平台而且高效的关键。另外Flutter学习了RN的UI编程方式,引入了状态机,更新UI时只更新最小改变区域。
系统的UI框架可以取代,但是系统提供的一些服务是无法取代的。Flutter在跟系统service通信方式,采用的是一种类似插件式的方式,或者有点像远程过程调用RPC方式。这种方式据说也要比RN的桥接方式高效。
Flutter与RN异同
简单总结一下Flutter与RN的异同。
- 都实现了移动开发跨平台
- 界面的编写都很类型,采用响应式视图,维护了一个状态机,只更新改变的最小区域界面
- 都支持热重载hot reload,开发调试非常方便
- 调用系统的service仍然需要封装接口,仍然还是需要懂得native开发
- RN采用JS语言开发,基于React,受众更多。Dart语言受众小
- Flutter的UI框架性能貌似更高一些,但是直接丢弃了原生UI框架。而RN还是可以自己利用原生框架,两个各有好处。Flutter的兼容性高,RN可以利用原生已有的优秀UI
- Flutter的第三方库还很少,RN发展的早,虽然也还不完善,但是比Flutter好
- RN的界面布局更像网页布局,而Flutter的布局更像native布局
- Flutter在跨平台这方面做得更彻底一些
Flutter、RN、原生对比(Android端)
以往的认知结果:
比较内容 | Flutter | RN | 原生 |
---|---|---|---|
平台实现 | 通过Dart虚拟机编译成机器码 | Virtual Dom映射到原生View,通过ART虚拟机编译成机器码 | 通过ART虚拟机编译成机器码 |
绘制引擎 | Skia | JS V8+Skia/OpenGL ES | Skia/OpenGL ES |
使用语言 | Dart | React | Java/Kotlin |
上手难度 | 一般 | 难 | / |
框架程度 | 重 | 较重 | 一般 |
社区 | 丰富,谷歌力捧 | 活跃,FaceBook支持 | 庞大,谷歌支持 |
软件发布 | 支持热更新(暂未开放) | 支持热更新 | 可热更新(有点麻烦且不稳定) |
性能测试过程:
分别用Flutter、RN、原生开发三个项目,只有一个列表页面,10000条数据,在三款低中高端机型中测试。
通过性能测试得出下表:
比较内容 | Flutter | RN | 原生 |
---|---|---|---|
APK大小 | 5.5M | 6.6M | 1.4M |
启动时间 | 冷启动319ms,热启动152ms | 冷启动243ms,热启动71ms | 冷启动181ms, 热启动74.8ms |
内存-cpu-魅蓝Metal | 初始30M ,滑动5000稳定后32M,cpu22% | 初始38M,滑动5000,稳定在60M,cpu45% | 初始:7.6M ,滑动5000条稳定在12M,cpu10% |
内存-cpu-魅族Pro5 | 初始85M ,滑动5000条稳定后110M,cpu12% | 初始56M,滑动5000,稳定在104M,cpu22% | 初始:29.5M ,滑动5000条稳定在42M,cpu7% |
内存-cpu-华为P20Pro | 初始99M ,滑动5000条稳定110M,cpu12% | 初始63M,滑动5000,稳定在80M,cpu22% | 初始:25M ,滑动5000条稳定在32M,cpu8% |
主观感受 | 无卡顿 | 滚动100条之后有卡顿 | 丝滑般 |
性能测试结论:
通过测试得出的数据结果,仅能从大体上比较出三者的性能,可能在实际的项目中会有些出入。
1、包体积原生比较小,Flutter和RN不相上下(Ios系统需要引入Skia库,最终包体积Flutter会明显大于RN),由于Flutter和RN框架中需要一些C++依赖库,导致包体积比原生大了很多。
2、启动时间,Flutter(冷热启动时间)>RN=原生
3、内存占用,在高端手机上,flutter占用内存是大于RN的,但是低端手机Flutter的内存占用会低于RN,RN内存占用不稳定,页面刚生成的时候内存占用会高一点, 之后缓慢回落。
3、CPU占用,RN明显高于Flutter和原生,这会导致手机性能降低、耗电量增加、发热更厉害
4、主观感受,Flutter要比RN更加流畅,体验感更好,但是和原生仍有不小差距,不过Flutter还很年轻,官方宣称其性能会接近原生,甚至超过原生体验,随着Google不断的改进相信在不远的将来会实现这个可能。
Flutter [Pū]
动词 扑
Flutter 与 RN对比相关推荐
- flutter与RN对比
本周五下午公司组织了三场分享: 一场是关于前端微架构; 一场是关于flutter的介绍; 一场是关于react native项目实战 flutter最近热度很高, 是由 Google 的工程师团队打造 ...
- Flutter和RN对比分析
1.Flutter (1)Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面.用于创建高性能.跨平台的移动应用的框架. (2)Flutter的开发语言是Da ...
- 流言终结者- Flutter和RN谁才是更好的跨端开发方案?
背景 论坛上很多小伙伴关心为什么闲鱼选择了Flutter而不选择其他跨端方案?站在质量的角度,高性能是一个很重的因素,我们使用Flutter重写了宝贝详情页之后,对比了Flutter和Native详情 ...
- Flutter、RN、uni-app比较
每当我们评估新技术时要问的第一个问题就是"它会给我们的业务和客户带来哪些价值?",工程师们很容易对闪闪发光的新事物着迷,却经常会忽略这些新事物其实可能对我们的客户没有任何好处,反而 ...
- 关于跨平台开发的方案路线选择?来看看flutter、rn和uni-app方案的比较吧
本文是转载于DCloud社区里开源作者DCloud_heavensoft 一篇关于对跨平台开发技术路线方案比较的文章,分别对现今较为热门的跨平台方案flutter.react native.uni-a ...
- 为什么说 Compose 的声明式代码最简洁 ?Compose/React/Flutter/SwiftUI 语法对比
前言 Comopse 与 React.Flutter.SwiftUI 同属声明式 UI 框架,有着相同的设计理念和相似的实现原理,但是 Compose 的 API 设计要更加简洁.本文就这几个框架在代 ...
- 淘宝直播PC客户端的hybrid探索
如何兼具"Native App良好交互体验的优势"和"Web App跨平台开发的优势"在当前互联网时代保持高效的业务迭代是一个非常重要的课题. 什么是hybri ...
- RN、Flutter、Uni-app APP框架对比
RN.Flutter.Uni-app APP框架对比 框架背景介绍 Flutter Flutter 是 Google 开源的 UI 工具包,帮助开发者通过一套代码库高效构建多平台精美应用,支持移动.W ...
- Flutter、ReactNative、uniapp对比
*************************************优雅的分割线 ********************************** 分享一波:程序员赚外快-必看的巅峰干货 如 ...
- 全网最全 Flutter 与 React Native 深入对比分析
作为 GSY 开源系列的作者,在去年也整理过 <移动端跨平台开发的深度解析> 的对比文章,时隔一年之后,本篇将重新由 环境搭建.实现原理.编程开发.插件开发.编译运行.性能稳定.发展未来 ...
最新文章
- 深入分析:12C ASM Normal冗余中PDB文件块号与AU关系与恢复
- 小工匠聊架构-分布式场景下的并发幂等性常见的解决方案
- JavaWeb黑马旅游网-学习笔记08【旅游线路详情】
- EntLib.com Forum – 开源ASP.NET论坛 v4.0(提供源码下载)
- 使用WTMPlus快速搭建发卡网
- 360数科 CTO 王继平:金融 IT 变革浪潮下,360数科的技术破局
- 在线判题系统(oj)效果分析图_在线代码编写平台开发分享
- 看《烈火雄心》 --当大家从火里出来,我们进去
- 【翻译】在backtrack5上用Evilgrade工具15步**windows
- vs2005 编码转换后编译的时候会出错,”error c101008a“,处理方法
- Java之JSON详解
- 关于中标麒麟系统出现“网络管理器未响应”这件事的解决办法
- 机器学习——鸢尾花数据集
- 显微镜C接口_显微分析设备聚焦离子束扫描电子显微镜
- 基于区块链技术的数据管理系统
- 计算机系统的图形图像编码方式,只有将数字、文字、图像、声音和视频等不同类型的信息转换成_______代码,才便于计算机加工和处理。...
- python爬虫文件下载很慢卡住线程_python爬虫多线程假死怎么解决?
- FastASR离线语音识别库
- grep命令Binary file
- aws上创建eks集群
热门文章
- iOS HomeKit Quick Start iOS HomeKit快速入门 Lynda课程中文字幕
- iPhone手机ipa破解补丁安装方法和ipa软件游戏安装教程(1)
- tensorflow学习之二 alexnet vgg resnet目标分类
- 关于windows自带的两种远程访问方式
- 平板/笔记本亮度调节工具halo(WINDOWS)
- Qt Creator下载安装以及Qt和Qt Creator的区别
- 软考系统集成项目管理工程师模拟题
- 中标麒麟linux操作系统下Chrome/Chromium的安装
- 【一起入门NLP】中科院自然语言处理作业一:RNN,DNN,CNN 进行猫狗分类(pytorch入门)【代码+报告】
- 跑步机上的精彩人生——Linus大神传奇