flutter是app跨平台最优解吗?

哈喽,我是老刘

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

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.mzph.cn/news/860232.shtml

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

相关文章

『 Linux 』 进程间通信 - 匿名管道 (万字)

文章目录 什么是管道匿名管道的直接原理pipe( )系统调用接口匿名管道代码示例匿名管道的特征总结 什么是管道 管道(Pipe) 是一种基本的进程间通信(IPC)机制,允许一个进程与另一个进程之间进行数据传输; 管道工作方式类似于生活中的水管因此命名为管道,数据从一端流入另一段流出…

NSSCTF-Web题目16

目录 [GDOUCTF 2023]受不了一点 1、题目 2、知识点 3、思路 [UUCTF 2022 新生赛]ez_upload 1、题目 2、知识点 3、思路 [GDOUCTF 2023]受不了一点 1、题目 2、知识点 php代码审计、数组绕过、弱比较绕过 3、思路 打开题目,出现代码,我们进行代…

【STM32】江科大STM32学习笔记汇总(已完结)

00. 目录 文章目录 00. 目录01. STM32学习笔记汇总02. 相关资料下载03. 打赏04. 附录 01. STM32学习笔记汇总 【STM32】STM32学习笔记-课程简介(01) 【STM32】STM32学习笔记-STM32简介(02) 【STM32】STM32学习笔记-软件安装(03) 【STM32】STM32学习笔记-新建工程(04) 【ST…

VUE div的右上角的角标/标签

一、效果图 二、代码 <div class"comp-overview"><div class"overview-item" v-for"(item,index) in overviewInfoList" :key"index"><div class"angle_mark"><span>{{item.label}}</span>&…

2024上海初中生古诗文大会倒计时4个月:单选题真题示例和独家解析

现在距离2024年初中生古诗文大会还有4个多月时间&#xff0c;我们继续来看10道选择题真题和详细解析&#xff0c;以下题目截取自我独家制作的在线真题集&#xff0c;都是来自于历届真题&#xff0c;去重、合并后&#xff0c;每道题都有参考答案和解析。 为帮助孩子自测和练习&…

Qt 信号与槽的使用详解 - 多种绑定形式、同步异步、Lambda表达式等

Qt 信号与槽的使用详解 - 多种绑定形式、同步异步、Lambda表达式等 引言一、信号与槽常见的绑定形式二、信号与槽的连接方式 - 同步异步 引言 在Qt框架中&#xff0c;信号与槽&#xff08;Signals and Slots&#xff09;机制是一种强大的通信方式&#xff0c;它允许对象之间进…

Linux常用命令、基本配置、shell基本语法整合

Linux常用命令的使用 Linux文件系统 和 Windows文件系统目录&#xff1a; Windows是分C盘、D盘、E盘…的&#xff0c;但是在Linux中是有一个最大的目录&#xff0c;称之为根目录&#xff0c;用 / 表示&#xff0c;根目录下面会有很多子目录&#xff0c;这些子目录其实可以理解…

百度comate 专业版免费试用90天

我发现一个编码效率提升好帮手——Baidu Comate&#xff0c;结合文心大模型和百度编程大数据&#xff0c;为你生成优质编程代码。现在通过我的链接注册&#xff0c;立得90天专业版体验卡&#xff0c;来吧&#xff0c;让我们一起释放“十倍”软件生产力&#xff01; https://com…

如何利用自助式商业智能(BI)打破组织中的数据孤岛?

前言 许多组织都存在数据问题。当许多员工远程工作&#xff08;或在混合环境中&#xff09;并在多个位置使用多个设备访问公司数据时&#xff0c;他们正在处理信息过载问题。这只会加剧数据孤岛的问题。 数据孤岛正是它听起来的样子&#xff1a;孤立在一个孤立的用户/环境中的…

[深度学习]循环神经网络RNN

RNN&#xff08;Recurrent Neural Network&#xff0c;即循环神经网络&#xff09;是一类用于处理序列数据的神经网络&#xff0c;广泛应用于自然语言处理&#xff08;NLP&#xff09;、时间序列预测、语音识别等领域。与传统的前馈神经网络不同&#xff0c;RNN具有循环结构&am…

【详述】BP神经网络建模流程一步一步详述

本文来自《老饼讲解-BP神经网络》https://www.bbbdata.com/ 目录 一、BP神经网络的建模流程二、BP神经网络的建模分步讲解2.1.数据归一化2.2.数据划分2.3.网络结构设置2.4.网络训练2.5.训练效果评估 本文梳理BP神经网络的建模流程&#xff0c;供大家建模时进行借鉴。 一、BP神经…

SPECweb2009调优指南

【写在前面】 飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力&#xff0c;聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域&#xff0c;包含了应用使能套件、软件仓库、软件支持、软件适…

计算机网络-BGP路由负载分担

在大型网络中&#xff0c;到达同一目的地通常会存在多条有效BGP路由&#xff0c;设备只会优选一条最优的BGP路由&#xff0c;将该路由加载到路由表中使用&#xff0c;这一特点往往会造成很多流量负载不均衡的情况。 通过配置BGP负载分担&#xff0c;可以使得设备同时将多条等代…

spring boot整合WebSocket实现群聊功能 通俗易懂教程

首先获取消息的内容&#xff0c;即payload。将payload转换为JSONObject对象&#xff0c;并从中获取消息类型type。如果消息类型是"join"&#xff0c;则从消息中获取群组ID&#xff0c;并将当前WebSocketSession的ID加入到该群组对应的Set中。如果消息类型是"lea…

Python爬取中国福彩网彩票数据并以图表形式显示

网页分析 首先打开中国福彩网&#xff0c;点击双色球&#xff0c;选择往期开奖栏目 进入栏目后&#xff0c;选定往期的奖金数目作为我们想要爬取的目标内容 明确目标后&#xff0c;开始寻找数据所在的位置 鼠标右击页面&#xff0c;打开网页源代码&#xff0c;在源代码中搜索…

vue3-openlayers 轨迹回放(历史轨迹)(ol-animation-path实现)

本篇介绍一下使用vue3-openlayers轨迹回放&#xff08;历史轨迹&#xff09;&#xff08;ol-animation-path实现&#xff09; 1 需求 轨迹回放&#xff08;历史轨迹&#xff09;实时轨迹 2 分析 轨迹回放&#xff08;历史轨迹&#xff09;&#xff0c;一般是一次性拿到所有…

功能测试【测试用例模板、Bug模板、手机App测试★】

功能测试 Day01 web项目环境与测试流程、业务流程测试一、【了解】web项目环境说明1.1 环境的定义&#xff1a;项目运行所需要的所有的软件和硬件组合1.2 环境(服务器)的组成&#xff1a;操作系统数据库web应用程序项目代码1.3 面试题&#xff1a;你们公司有几套环境&#xff1…

淘宝用户行为分析大数据可视化

文章目录 1. 项目概述2. 技术栈3. 目录结构4. 数据处理流程5. 前端部分5.1 HTML (index.html)5.2 CSS (layer.css)5.3 JavaScript (chart.js) 6. 后端部分7. 数据可视化7.1 ECharts 图表 8. 主要功能模块9. 代码解析10. 数据接口11. 项目功能描述12. 代码功能实现12.1 HTML (in…

Kubernetes 中 ElasticSearch 中的 MinIO 审核日志

无论您是在本地还是在云中&#xff0c;您都希望确保以同构的方式设置工具和流程。无论在何处访问基础结构&#xff0c;您都希望确保用于与各种基础结构进行交互的工具与其他区域相似。 考虑到这一点&#xff0c;在部署您自己的 MinIO 对象存储基础架构时&#xff0c;深入了解您…

无需 AU 专业工具,简单有效的人声分离操作图文教程来了

音乐制作与音频编辑已成为众多创意工作者不可或缺的一部分。无论是制作混音、进行音乐分析&#xff0c;还是为视频内容寻找完美的配音&#xff0c;人声分离技术都扮演着至关重要的角色。 传统上&#xff0c;这样的任务可能需要专业的音频编辑软件如 Adobe Audition&#xff08…