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

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

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

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

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

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

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

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

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


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

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

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

    这个怎么理解呢?


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

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

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

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


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

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

    neoblackcap
        31
    neoblackcap  
       11 天前
    @wxf666 那就是我错了,一切以事实为准
    bringwin808
        32
    bringwin808  
       11 天前 via Android
    @Morxi 这么看,你是用 QtWigets 老一套了,这套在 Windows 和 MacOS 上都是自绘的,而且还是软件渲染。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5389 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 47ms · UTC 08:39 · PVG 16:39 · LAX 01:39 · JFK 04:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.