flutter是app跨平台最优解吗?

news2024/12/26 21:21:35

哈喽,我是老刘

最近在知乎上看到这样一个问题

image.png

我们先来解释一下问题中碰到的几个现象的可能原因,然后聊聊跨平台的最优解问题

问题解释

1、跟手、丝滑问题

这个问题其实很多人是有误解的,觉得原生的就丝滑跟手
其实不是这样的
我在做Flutter开发之前,已经做了好几年的Android开发
那时候我日常工作中时不时会出现的一项任务就是优化某个页面的性能
所以即使是原生也经常出现页面卡顿的情况

为什么会这样呢?
其实这和客户端的运行原理有关
在客户端开发中,不管是原生还是Flutter,都会给开发者提供最大程度的可控性
比如如果你实现一个列表页,如果列表中的每一行都只是一行简单的文字
那不管原生还是Flutter,甚至RN、网页都可以很流畅
但是如果你希望随着列表页的上下滑动,其中的每个行都基于它在屏幕中的位置展示不同的颜色、大小等外观
那么就需要列表页每向上或者向下滑动一个像素,都能调用一次你写的代码,来重新根据当前位置计算这一行的大小和颜色等属性
原生和Flutter在如何设置及调用这个处理方法的细节上不同,但是基本流程都是一样的
那么如果你的计算方法很复杂,耗时300ms
就相对于页面每移动一个像素,就要等你的回调运算300ms
用户体验自然就是卡顿,不流畅
而我们开发人员进行性能优化,有很大一部分就是减少这种每一帧的运算耗时

所以很多用户看到的卡顿其实不是平台或者框架的问题,而是开发者有没有优化到位的问题

当然,在某些极端性能要求的场景下,Flutter的性能确实比原生是要差一点的
这种问题随着Impeller引擎的替换,会逐步得到解决
而且这种情况大多数页面里用户是感觉不到的

2、不同页面状态不一致

后面提出的开始下载了下载页面没有显示,以及聊天通知到了但是页面没有看到
我统一归类为不同页面状态不一致问题

我们拿下载功能为例,来看一下这个功能大约是怎么实现的
首先我们要实现一个后台的下载模块
功能是完成文件下载到本地、下载的暂停续传、下载状态维护、下载进度等状态变化对外通知
注意这个功能是完全的后台功能,用户是看不到的

然后我们来实现用户的UI
这里会实现两个和下载相关的页面:
一个是文件列表页,有下载按钮,点击后启动下载
第二个是下载页面,显示正在下载的资源的下载状态,比如下载进度
在第一个页面中,我们点击下载按钮,就会通知下载模块开始一个下载任务

那么具体如何开始下载任务呢
通常是这样的过程
a、调用服务端的接口,根据选择的文件id,获取下载该文件的cdn地址
b、和cdn服务器建立连接
c、开始从cdn服务器下载资源

我们可以看到,从第一步开始就需要网络传输
所以在真正开始下载文件之前,也是有网络传输的,只不过这个数据量不会很大
而且如果下载模块实现的不是很严谨
当文件真正开始下载之前,下载模块没有把这个下载任务添加到正在下载的任务列表中
就会出现前面提到的网络已经在跑但是下载列表中看不到的场景

那么大家觉得这种情况是开发框架的问题还是代码实现的问题呢?

好了,前面的说明只是想告诉大家
很多时候我们看到一个软件的bug或者说缺陷
不一定是软件使用的框架不好,也有可能是软件的实现不太好或者优化不到位
那么接下来我们来说说跨平台的最优解

跨平台的最优解

首先我认为这个是伪命题

有人认为Flutter是跨平台开发的最优解,但这种观点往往忽略了不同应用场景下的具体需求。
事实上,并没有一种“一刀切”的解决方案,每种框架都有其适用的场景和优势。
不同的应用场景对技术的需求是多样化的。
例如,在需要高度动态化的应用场景中,用户无需升级App即可体验新功能,这时React Native(RN)可能因其热更新特性而成为更好的选择。

Flutter的最佳适用场景

那么,哪些场景下Flutter是最佳选择呢?
我觉得是以下两个主要的场景:
1、对性能有较高要求:
Flutter通过编译成原生代码,能够提供接近原生应用的性能。对于那些对响应速度和流畅度有严格要求的应用,如游戏或需要复杂图形渲染的应用,Flutter无疑是一个优秀的选择。
2、对两端一致性有较高要求:
Flutter提供了统一的UI组件库,这有助于开发者在iOS和Android平台上实现一致的用户体验。对于那些追求在不同平台上提供统一界面和体验的应用,Flutter的这一特性显得尤为重要。

特定条件下的最优选择

我们不应该认为Flutter是完美无缺的。
实际上,在满足特定条件的情况下,Flutter可以是目前能找到的最优选择。
这并不是因为Flutter在所有方面都是最好的,而是因为它在特定场景下能够提供最佳的性能、一致性和开发效率。

总结

技术选型是一个需要根据具体情况权衡利弊的过程。
开发者应该深入了解不同技术的优势和局限性,并结合项目的实际需求来做出最合适的决策。
无论是Flutter、React Native还是其他技术,它们都只是在特定条件下的最优选择,而不是放之四海而皆准的解决方案。

如果看到这里的同学有学习Flutter的兴趣,欢迎联系老刘,我们互相学习。
点击免费领老刘整理的《Flutter开发手册》,覆盖90%应用开发场景。
可以作为Flutter学习的知识地图。
覆盖90%开发场景的《Flutter开发手册》icon-default.png?t=N7T8https://mp.weixin.qq.com/s?__biz=MzkxMDMzNTM0Mw==&mid=2247483665&idx=1&sn=56aec9504da3ffad5797e703c12c51f6&chksm=c12c4d11f65bc40767956e534bd4b6fa71cbc2b8f8980294b6db7582672809c966e13cbbed25#rd

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

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

相关文章

【内网安全】组策略同步-不出网隧道上线-TCP转ICMP

目录 域控-防火墙-组策略对象同步演示1、打开组策略管理,新建一个GPO连接 取名fhq(防火墙)2、编辑fhq并设置防火墙状态3、命令:gpupdate/force 更新策略4、域控主机新增规则5、域内用户主机更新规则 域控-防火墙-组策略不出网上线演示 ICMP协议上线&…

CentOS停更无忧,中国操作系统闯入后CentOS时代

国际开源服务器操作系统CentOS停更,引发了中国操作系统火线进化——开源龙蜥操作系统社区涌现出大量的技术创新,相关创新技术迅速转化为商业化产品。2024年6月,浪潮信息与龙蜥社区联合发布服务器操作系统云峦KeyarchOS V5.8 新版本&#xff0…

【秋招突围】2024届秋招笔试-科大笔试题-01-三语言题解(Java/Cpp/Python)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系计划跟新各公司春秋招的笔试题 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 文章目录 &#x1f4d6…

入门网络安全工程师要学习哪些内容

大家都知道网络安全行业很火,这个行业因为国家政策趋势正在大力发展,大有可为!但很多人对网络安全工程师还是不了解,不知道网络安全工程师需要学什么?知了堂小编总结出以下要点。 网络安全工程师是一个概称,学习的东西很多&…

六、资产安全—信息分级资产管理与隐私保护(CISSP)

目录 1.信息分级 2.信息分级方法 3.责任的层级 4.资产管理 5.隐私数据管理角色 6.数据安全控制 7.数据保护方案 8.使用安全基线 六、资产安全—数据管理(CISSP): 五、身份与访问管理—身份管理和访问控制管理(CISSP): 1.信息分级 信息分级举列: 2.信息分级方…

ingress相关yaml文件报错且相关资源一切正常解决方法

今天在执行ingress相关文件的时候莫名其妙报错了,问了别人得知了这个方法 执行ingress相关文件报错 01.yaml是我自己创建关于ingress的yaml文件 报错信息 且相关资源一切正常 解决方法 kubectl get validatingwebhookconfigurations删除ingress-nginx-admissio…

商城积分系统的代码实现(上)-- 积分账户及收支记录

一、背景 上一系列文章,我们说了积分的数模设计及接口设计,接下里,我们将梳理一下具体的代码实现。 使用的语言的java,基本框架是spring-boot,持久化框架则是Jpa。 使用到的技术点有: 分布式锁&#xf…

AI大模型日报#0628:谷歌开源9B 27B版Gemma2、AI首次实时生成视频、讯飞星火4.0发布

导读:AI大模型日报,爬虫LLM自动生成,一文览尽每日AI大模型要点资讯!目前采用“文心一言”(ERNIE-4.0-8K-latest)生成了今日要点以及每条资讯的摘要。欢迎阅读!《AI大模型日报》今日要点&#xf…

抗击.michevol勒索病毒:保障数据安全的新策略

导言: 在今天高度互联的数字化环境中,数据安全面临着越来越复杂和普遍的威胁,勒索病毒如.michevol已成为了用户和企业普遍面临的风险。本文91数据恢复将探讨.michevol勒索病毒的特点、感染方式以及创新的防御策略,旨在帮助读者更…

九、(正点原子)Linux定时器

一、Linux中断简介 1、中断号 每个中断都有一个中断号,通过中断号即可区分不同的中断,有的资料也把中断号叫做中断线。在 Linux 内核中使用一个 int 变量表示中断号。在Linux中,我们可以使用已经编写好的API函数来申请中断号,定义…

快手主播李香周助力推动 K-beauty风潮谈背后成功秘诀

近年来,互联网的迅速发展和SNS社交媒体的普及,人们通过网络可以随时随地对自己感兴趣的自由畅谈和学习。而直播带货更是作为一种依托于互联网兴起的新型营销方式,凭借其价格优势和新颖的介绍方式为消费者带来了十分便捷的购物体验。 本期采访…

【shell脚本速成】python安装脚本

文章目录 案例需求应用场景解决问题脚本思路案例代码 🌈你好呀!我是 山顶风景独好 🎈欢迎踏入我的博客世界,能与您在此邂逅,真是缘分使然!😊 🌸愿您在此停留的每一刻,都沐…

①常用API----Math

public static int abs(int a) // 返回参数的绝对值 public static double ceil(double a) // 返回大于或等于参数的最小整数 public static double floor(double a) // 返回小于或等于参数的最大整数 public static int round(f…

数据库调优厂商 OtterTune 宣布停止运营

昨天刷到消息,得知数据库优化厂商 OtterTune 停止了运营。OtterTune 的成员主要来自 CMU Andy Pavlo 教授领导的数据库实验室。公司正式成立于 2021 年 5 月,融资了 1450 万美金。 按照 Andy 教授的说法,公司是被一个收购 offer 搞砸了。同时…

pcr实验室和P2实验室装修设计中的区别

PCR实验室和P2实验室在装修设计的区别是什么?PCR实验室指的是基因扩增实验室,而P2实验室是指生物安全实验室中的一个分类,是生物安全防护达到二级的实验室。那么PCR实验室和P2实验室装修设计标准是什么?实验室装修公司小编为您详解…

【Python自动化测试】如何才能让用例自动运行完之后,生成一张直观可看易懂的测试报告呢?

小编使用的是unittest的一个扩展HTMLTestRunner 环境准备 使用之前,我们需要下载HTMLTestRunner.py文件 点击HTMLTestRunner后进入的是一个写满代码的网页,小编推荐操作:右键 --> 另存为,文件名称千万不要改 python3使用上述…

.net 奇葩问题调试经历之2——内存暴涨,来自非托管的内存泄露

📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香!📢本文作者:由webmote 原创📢作者格言:新的征程,我们面对的不仅仅是技术还有人心,人心不可测,海水不可量,唯有技术,才是深沉黑夜中的一座闪烁的灯塔序言 这是一个序列文章,请看以往文…

数据库同步最简单的方法

数据库同步到底有咩有简单的方法,有肯定是有的,就看你有咩有缘,看到这篇文章,你就是有缘人。众所周知,数据库同步向来都不是一件简单的事情,它很繁琐,很费精力,很考验经验&#xff0…

Hadoop版本演变、分布式集群搭建

Hadoop版本演变历史 Hadoop发行版非常的多,有华为发行版、Intel发行版、Cloudera Hadoop(CDH)、Hortonworks Hadoop(HDP),这些发行版都是基于Apache Hadoop衍生出来的。 目前Hadoop经历了三个大的版本。 hadoop1.x:HDFSMapReduce hadoop2.x…

ai智能语音机器人在电销里发挥怎样的作用

得益于语音识别技术的的进步,人工智能发展越来越成熟。相信作为企业的管理者,都遇到过这样的事:一个电销新人刚刚入行,需求经过一两个月的学习培训才能成为一名合格的销售人员。在这段学习的期间,企业投入的成本是没有…