跨平台的客户端gui到底是选“原生”还是web

server/2025/2/6 3:24:33/

我们讨论的是客户端的“前端”gui部分是选“原生”还是“web”,而不是讨论客户端用“js”还是“原生”。为什么这么说呢?我们应该把客户端也分为“前端”和“后端”,如果客户端没有“后端”,那么不在讨论范围。

我们看一下“前端”的定义:(Front-End) 通常指与用户直接交互的部分,即用户看到、操作并与之互动的界面。它涵盖了视觉设计、交互逻辑,主要关注用户体验(User Experience, UX)和用户界面(User Interface, UI)。

前端设计的核心是以用户为中心,在技术实现中平衡功能、性能与美学,同时关注长期维护成本和扩展性。

美观和维护成本,肯定是web占优势的,我们重点关注一下性能。

前端的性能优化是这样说的:加载速度、渲染效率、首屏体验。其实就是界面的加载速度,能不能让用户感觉不到卡顿。这一点呢,其实web和原生的差别并不大,只要技术没用错,带客户端的web也完全感觉不到卡顿。

所以从gui部分对比,我们得到的结论是web技术是最佳的选择。

现在我们来看“性能”的真正对决,“后端”。对于"原生"来说,我们一般把客户端全部使用c/c++或者rust的叫做“原生”。问题来了,用“web”的,别人也可以c/c++或者rust呀。挂一个“127.0.0.1的webapi”不就可以了。你可能要用web发送请求给api,到返回数据给api需要资源开销,webapi本身也需要性能开销。确实有一点,但是单机webapi的这点开销,非常的小。除些之外,性能和原生是一模一样的。

最重要的一点是开发速度,web框架的开发速度比"原生"快N倍,速度就是金钱。等你慢慢悠悠用“原生”把项目做出来,人家早就把位置占完了,而且你的项目也并没有什么优势。

“原生”的代表框架,qt。确实很优秀,但是社区版只能用基础功能,好用的组件都贵得要命。

"web"的代表框架,electron。百搭的框架,你看人家用electron就觉得全是js?别人也带个127.0.0.1的c/c++或者rust后端,一样跑得飞起。

再看rust的"web"的代表框架,tauri。直接把rust后端和web前端合并使用的,如果rust代码用得多,性能根本就不会差。

不管用什么web框架,一大堆开源免费的组件,效果完虐qt那些收费的组件。

所以,推荐web做客户端。


http://www.ppmy.cn/server/165313.html

相关文章

Kafka常见问题之 org.apache.kafka.common.errors.RecordTooLargeException

文章目录 Kafka常见问题之 org.apache.kafka.common.errors.RecordTooLargeException: The message is 1,048,576 bytes when serialized which is larger than the maximum request size.1. 错误解析2. 错误原因3. 错误复现案例3.1 生产者发送超大消息 4. 解决方案4.1 方法 1&…

CF 761A.Dasha and Stairs(Java实现)

题目分析 大概意思是输入偶数值奇数值,判断是否能够凑成一连串数字 思路分析 能够连成一串数字的条件考虑:1.偶数与奇数差为1;2.偶数与奇数相等,且不为0 代码 import java.util.*;public class Main {public static void…

AJAX案例——图片上传个人信息操作

黑马程序员视频地址&#xff1a; AJAX-Day02-11.图片上传https://www.bilibili.com/video/BV1MN411y7pw?vd_source0a2d366696f87e241adc64419bf12cab&spm_id_from333.788.videopod.episodes&p26 图片上传 <!-- 文件选择元素 --><input type"file"…

react中如何获取dom元素

实现代码 const inputRef useRef(null) inputRef.current.focus()

《苍穹外卖》项目学习记录-Day11用户统计

返回的数据由前端这个折线图来约定的&#xff0c;也就是说折线图对这个数据有这样的要求&#xff0c;我们去适应前端的这个数据格式&#xff0c;也就是前端需要什么样的数据&#xff0c;我们后端给它什么样的数据。 统计指定时间区间之内的每一天的用户数量&#xff0c;每一天的…

QMK启用摇杆和鼠标按键功能

虽然选择了触摸屏&#xff0c;我仍选择为机械键盘嵌入摇杆模块&#xff0c;这本质上是对"操作连续性"的执着。   值得深思的是&#xff0c;本次开发过程中借助DeepSeek的代码生成与逻辑推理&#xff0c;其展现的能力已然颠覆传统编程范式&#xff0c;需求描述可自动…

Hive:窗口函数[ntile, first_value,row_number() ,rank(),dens_rank()]和自定义函数

ntile 分组 它把有序的数据集合 平均分配 到 指定的数量&#xff08;num &#xff09;个桶中 , 将桶号分配给每一行。如果不能平均分配&#xff0c;则优先分配较小编号的桶&#xff0c;并且各个桶中能放的行数最多相差1。 被称作窗口函数、序列函数或分析函数, 本质上是一种…

Vue06

目录 一、声明式导航-导航链接 1.需求 2.解决方案 3.通过router-link自带的两个样式进行高亮 二、声明式导航的两个类名 1.router-link-active 2.router-link-exact-active 三、声明式导航-自定义类名&#xff08;了解&#xff09; 1.问题 2.解决方案 3.代码演示 四…