drymonfidelia

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

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

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

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

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

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

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

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


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

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

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

    这个怎么理解呢?


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

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

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

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


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

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

    neoblackcap
    neoblackcap
    Oct 6, 2024
    31
    @wxf666 那就是我错了,一切以事实为准
    bringwin808
    bringwin808
    Oct 6, 2024 via Android
    32
    @Morxi 这么看,你是用 QtWigets 老一套了,这套在 Windows 和 MacOS 上都是自绘的,而且还是软件渲染。
    forwen
    forwen
    Oct 23, 2024
    33
    qt 现在进军车机 3D 了各位元芳怎么看????
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1561 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 69ms · UTC 17:41 · PVG 01:41 · LAX 09:41 · JFK 12:41
    ♥ Do have faith in what you're doing.