V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
drymonfidelia
V2EX  ›  前端开发

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

  •  
  •   drymonfidelia · 2024-10-05 02:08:23 +08:00 · 8028 次点击
    这是一个创建于 381 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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  
       362 天前
    qt 现在进军车机 3D 了各位元芳怎么看????
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   5594 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 01:24 · PVG 09:24 · LAX 18:24 · JFK 21:24
    ♥ Do have faith in what you're doing.