为什么 Qt 写的程序在不同桌面平台都很丝滑,体验和原生一样,移动端多端框架每一个都很卡?尤其是 Flutter,实测性能非常糟糕,不知道为什么这么多人吹 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
drymonfidelia
V2EX    前端开发

为什么 Qt 写的程序在不同桌面平台都很丝滑,体验和原生一样,移动端多端框架每一个都很卡?尤其是 Flutter,实测性能非常糟糕,不知道为什么这么多人吹

  •  
  •   drymonfidelia 2024-10-05 02:08:23 +08:00 8407 次点击
    这是一个创建于 437 天前的主题,其中的信息可能已经有所发展或是发生改变。
    33 条回复    2024-10-23 16:53:48 +08:00
    oukichi
        1
    oukichi  
       2024-10-05 02:11:41 +08:00
    你咋测的?
    drymonfidelia
        2
    drymonfidelia  
    OP
       2024-10-05 03:40:18 +08:00
    @oukichi 写了几个比较极端场景的 demo ,已确认是 release build ,滑动掉帧很严重,多点两下就闪退了。还不如 MAUI 和 React Native (这两个也很卡,但是比 Flutter 强多了)
    而且用起来感觉像游戏引擎
    Morxi
        3
    Morxi  
       2024-10-05 04:10:08 +08:00   3
    两边都用过,Qt 写出来的桌面应用基本调的都是原生组件,保证不了多端一致性,跨平台也没办法做到不对目标平台 wrapper 的情况下舒服的跑(除非只用 Qt 自带的库不用第三方库)
    flutter 就是跑了 Dart VM ,然后构建的产物和必要的库一打包,和浏览器那套也差不多。
    真要比也应该拿 Qt/Embedded 这套去比性能,这是直接接 Frame buffer ,其他调用上层原生 GUI 的 Qt 产物都是蹭了系统支持的红利
    我之前所在的汽车电子已经全面转向 Flutter 了,之前有一些厂商用虚幻引擎或者 Unity 做智能座舱,结果这俩都要收大钱。然后 Qt 之流开发效率慢,做出来不好看。 上 GPU 优化以后的 Flutter 就很猛
    Morxi
        4
    Morxi  
       2024-10-05 04:17:38 +08:00   1
    补一个具体场景,同一辆车智驾版仪表跑的是鸿蒙,新能源版跑的是 Linux ,然后货运版是 QNX 。现在已经有一套开发好的仪表界面给这堆大屏用...
    然后界面要一致,第三方库也要能复用,还有什么比类游戏引擎的玩意更合适的呢。
    以前大家都是 QNX 的时候倒是满街 Qt ,可惜现在自研系统不要太多
    jeesk
        5
    jeesk  
       2024-10-05 05:35:01 +08:00
    既然是极端场景, 有试过用原生写吗?
    WildCat
        6
    WildCat  
       2024-10-05 05:55:08 +08:00
    说个离题的话,做跨平台 UI 最好的选择一直都是 web 。
    其次 React Native 。

    Qt 那种也就维护一下老项目。
    bringwin808
        7
    bringwin808  
       2024-10-05 08:21:58 +08:00 via Android   2
    @Morxi 并不是,Qt 也是自绘的,以前 windows 上一堆 DirectUI 实现。
    kele999
        8
    kele999  
       2024-10-05 08:27:26 +08:00
    你是对的
    alphaControler
        9
    alphaControler  
       2024-10-05 08:43:13 +08:00 via Android
    QT 是要付费的吧?
    dbskcnc
        10
    dbskcnc  
       2024-10-05 09:21:01 +08:00 via Android   8
    点两下就闪退了,这个程序还有比较性能的必要吗?我咋看都像是人的问题居多.
    有一说一,代码亮出来录个视频啥的,这个才是基本的态度,啥都没有,一个生手光输出情绪,其实没有交流的价值
    sir283
        11
    sir283  
       2024-10-05 09:41:35 +08:00
    你把 Flutter 当作一个 chrome 浏览器+web ,就能理解了,极端情况下,Flutter 开发可能存在优化,但是大部分的开发者使用 Flutter 是完全没有优化的,比如咸鱼、某红色 app 、某些银行 app ,以及一堆小众 app 。
    jorneyr
        12
    jorneyr  
       2024-10-05 09:47:12 +08:00   2
    @Morxi 两边都用过,Qt 写出来的桌面应用基本调的都是原生组件。
    你确定? QWidget 的组件样式是原生风格,但组件实际是 Qt 自己画出来的,不是调用系统自己的 Ui 框架。
    jqtmviyu
        13
    jqtmviyu  
       2024-10-05 10:24:10 +08:00
    说真的, 只要闲鱼还在一天, 就是在为 Flutter 拉黑.
    开发团队发了一堆什么 xx 优化的文章, 结果应用卡顿掉帧, 真不脸红的吗?
    zhwguest
        14
    zhwguest  
       2024-10-05 10:35:52 +08:00
    先修复点两下就崩溃的问题再测试性能吧,不能把所有的锅都推到 flutter 上。
    mayli
        15
    mayli  
       2024-10-05 10:39:40 +08:00
    @Morxi 的确,有 gpu 渲染加速的话,flutter 不算慢。但是有些平台至今 gpu 渲染也不成熟。
    Shazoo
        16
    Shazoo  
       2024-10-05 11:00:50 +08:00
    QT 调用原生组件吗……

    要不你再研究研究下吧……

    至于跨平台风格,一般是设置下 QSS 即可保证风格一致。如果不设置,就是系统默认风格。
    Helsing
        17
    Helsing  
       2024-10-05 11:03:28 +08:00 via iPhone
    严重怀疑你写的代码有问题,你用 GPT 写个代码测试都比你写的有说服力
    R4rvZ6agNVWr56V0
        18
    R4rvZ6agNVWr56V0  
       2024-10-05 13:32:16 +08:00
    " 不知道为什么这么多人吹 "
    众人皆醉你独醒 ? 技术圈内的人可不是普通 p 民吧,至少大多数也是实践派了,你觉得他们怎么会拥抱垃圾技术呢?
    wxf666
        19
    wxf666  
       2024-10-05 17:37:33 +08:00
    别的不知道,但 Flutter 应用,每一帧都是全屏重绘的。不知这点是否有拖慢响应,使得交互有滞后感。。

    理由:我以前测试,丢复杂文本进编辑框后,全窗口都会变卡顿。。

    按理说,与文本框无重叠的元素,应该不卡顿才对呀。。

    (下面是当时测试的,两个 Flutter 应用,录制的 GIF )


    JoeDH
        20
    JoeDH  
       2024-10-05 20:36:43 +08:00
    @jqtmviyu 阿里的都这样,用过的各类软件 淘宝 天猫 饿了么 一淘,没有一个说用的很顺畅的,其中最卡最恶心的应该是饿了么
    neoblackcap
        21
    neoblackcap  
       2024-10-05 21:18:44 +08:00
    @wxf666 重绘没啥性能问题,就是对移动端不是很友好,毕竟耗能。即时模式 GUI 一直都有的,而且基本上对图形渲染有要求的需求,都是得用即时模式。
    如果卡顿的话,应该是没处理好事件响应
    Rrrrrr
        22
    Rrrrrr  
       2024-10-05 21:22:00 +08:00
    你来弄一个?我也觉得没哪个好用
    Morxi
        23
    Morxi  
       2024-10-05 21:59:58 +08:00
    @jorneyr
    @Shazoo
    @bringwin808
    我之前主要做 Qt/Embedded 开发,做多平台支撑的时候遇到过 Qt 打包直接交互异常,主要集中在按钮效果和富文本。实际应用也只限于做 QWindow ,涉及到的交互很少。
    我也没说 Qt 没有元素自绘,弄个 EGL 做播放器之类的需求也场景也正常,真的展开来还是得看用的后端是啥。
    1una0bserver
        24
    1una0bserver  
       2024-10-06 00:15:03 +08:00 via Android
    flutter ,react native ,compose multiplatform ,qml ,uniapp 都写过,我感觉在 85%场景稍微注意下写法性能都不会太差,所以我在这里也下一个暴论,是你水平不行,要么就是写法不对。毕竟你连测试代码和场景都没有说明白,就抛出你的观点让人接受,有点先射箭后画靶子的味道了。
    jorneyr
        25
    jorneyr  
       2024-10-06 10:34:22 +08:00
    @Morxi Qt 的 Ui 快应该主要原因是 C++ 本身的效率高,再加上 Qt 优化的好,极端的例如 ImGui 这种也是基于 C++ 的并且固定频率刷新界面而不是需要的时候才刷新界面的都很快。

    至于 Graphics View 框架更是通过 space partition 算法,可见范围内才显示,能够支持百万图元的高效显示 (如果百万图元都在可视范围内一样很慢)。
    aLazarus
        26
    aLazarus  
       2024-10-06 11:38:07 +08:00
    话说现在类似 electron 框架,对 windows 触控设备支持的好么?就比如在 tab 之间通过手势滑动切换这种功能做到么
    iorilu
        27
    iorilu  
       2024-10-06 14:55:23 +08:00
    qt 本来就是原生把, 都是 c++还不算原生吗, 难度要汇编才算
    wxf666
        28
    wxf666  
       2024-10-06 17:09:32 +08:00
    @neoblackcap #21

    > 对图形渲染有要求的需求,都是得用即时模式。

    这个怎么理解呢?


    浏览器渲染,比这些客户端复杂吧。。可浏览器也是局部重绘的呀?

    《开发工具》里,甚至有《突出显示需要重新绘制的区域》的选项。。

    而且滚动条拉太快,下方的画面,会是一堆白色框框,还未渲染出来呢。。

    如果一直是全屏重绘,滚动条拉到哪,绘制量不都差不多吗?上方能 60 Hz 刷新,下方咋就出白框框了呢。。


    另外,前几年 老 Edge 浏览器,不是更被谷歌使绊子,油管视频上方放特殊元素,就变得卡顿,耗电激增吗?

    如果一直是全屏重绘,增加这点绘制量,咋会让 老 Edge 这么吃亏呢。。
    neoblackcap
        29
    neoblackcap  
       2024-10-06 17:43:47 +08:00
    @wxf666 我只能说事实就是游戏,创作类软件,甚至 vscode 的编辑区都是使用即时模式自绘渲染的。而日常的很多软件的确是使用 Retained Mode (保留模式)渲染,中原因我也不清楚
    wxf666
        30
    wxf666  
       2024-10-06 17:57:52 +08:00
    @neoblackcap #29 试了一下,vscode 也是局部重绘的?

    neoblackcap
        31
    neoblackcap  
       2024-10-06 18:22:33 +08:00
    @wxf666 那就是我错了,一切以事实为准
    bringwin808
        32
    bringwin808  
       2024-10-06 22:17:41 +08:00 via Android
    @Morxi 这么看,你是用 QtWigets 老一套了,这套在 Windows 和 MacOS 上都是自绘的,而且还是软件渲染。
    forwen
        33
    forwen  
       2024-10-23 16:53:48 +08:00
    qt 现在进军车机 3D 了各位元芳怎么看????
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     960 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 63ms UTC 19:08 PVG 03:08 LAX 11:08 JFK 14:08
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86