V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
w568w
V2EX  ›  程序员

2023 年,有什么原生级性能的跨平台 UI 框架?

  •  4
     
  •   w568w · 2023-07-08 09:57:15 +08:00 · 20959 次点击
    这是一个创建于 533 天前的主题,其中的信息可能已经有所发展或是发生改变。

    月经问题了,以下贴已读过但是没有找到合适的:

    打算开个 Side Project 写着玩。准备趁机学点新东西,满足一下自己的软件洁癖……

    对框架的需求主要有:

    1. 至少支持 Windows 、Linux (X11)、macOS 三个主流桌面平台
    2. 尽可能不需要携带体积大的捆绑库(如 CEF );
    3. 内存占用小,启动速度接近原生
    4. 支持丰富的文本排版格式(例如同行内图文混排等)。

    已经尝试过但不合适的有:

    1. PWA:内存占用大,需要下载浏览器;
    2. Electron:内存占用大,需要携带近百 MB 的 CEF ;
    3. Tauri:内存占用大,冷启动时空屏时间极长;
    4. ReactNative:内存占用大,冷启动时空屏时间长;
    5. JavaFX / Compose Multiplatform:冷启动速度慢,需要携带 JRE ;
    6. Sciter:对 Linux 的支持基本放弃(声称支持 X11 ,实测官方 Demo 无法正常渲染);
    7. FLTK:Windows 下的中文字体渲染非常糟糕;
    8. OpenGL/Vulkan:这不算 UI 框架吧?

    使用的语言无所谓,主流框架的基本多少会一点。

    之前有 Flutter 和 Android 的开发经验,所以推荐 Flutter 就免了。这不是想学点新玩意吗😂

    第 1 条附言  ·  2023-07-09 10:47:43 +08:00

    为刚进贴的朋友省流,补充一下各位已经提到的框架和优缺点(可能含个人暴论):

    1. Unity:写软件,你认真的吗?😂
    2. Slint:新兴 Rust/JS/C++ 绑定 UI 框架,生态有待发展;
    3. Qt/PyQt:截至目前呼声最高的选项,最成熟的 C++ 解决方案。「Qt 运行速度比 wxWidget 肉眼可见的慢一丢丢,比如弹出菜单能明显感觉会比纯原生的迟滞一点点,但毕竟是 C++ 的,还是很快的,重点是它的 API 设计得很好,比 wxWidget 好一个时代,以及官方文档和示例非常好」;
    4. wxWidgets:「运行速度更快,毕竟是真原生,但 API 跟 MFC 高度相似,就是上个世纪的风格,会觉得很落后难用」;
    5. Delphi:半身进棺材了;
    6. imgui:文档称「特别适合集成在游戏引擎(用于工具)、实时3D应用程序......以创建内容创建工具和可视化工具(相对于普通最终用户的用户界面)」;
    7. Avalonia:也许是 Qt 以外的最优解之一,「采用 NativeAOT 编译即可达到双击立即启动的水平,并且不需要携带运行时」「感觉和用 Electron 应用差不多,笨重、软绵绵、不跟手」;
    8. JUCE:声学领域专有 UI 框架,也许不怎么合适;
    9. GTK4:桌面 Linux 上已成事实标准的 UI 框架,也许同样是 Qt 以外的最优解之一;
    10. JavaFX+GraalVM:「可以编译成原生的程序,内存占用可以降低到几十兆,冷启动速度极快,我曾用 java 开发了一个类似 Bob 的软件,常驻后台无压力」;
    11. MAUI:官方不支持 Linux;
    12. SWT:类似 Java 版的 wxWidgets?

    多嘴一句,以上没有轻视某个框架的意思,适合的就是最好的。

    之前给某个省级项目做开发的时候,要求做移动客户端和网页端,工期给得很紧迫。因为熟悉 Flutter,立刻决定用 Flutter 一把梭全上了。了解 Flutter 的朋友应该知道 Flutter 的 Web 性能和兼容性和 React、Vue 等框架开发的原生 Web 应用相很拉垮,但那又如何呢?客户又不在意打开速度、白屏时间、软件体积和内存占用,都是统一安装到办公用机上的。按期交差了,他们开心我们也开心。


    看到一些 V 友质疑我是「矫情病」「既要又要还要」「伪需求」,再多说两句。

    需要明确的一点是,正如我上面所说的,这是个 Side Project,不是正经项目;我不是产品经理/外包方,各位也不是正在看需求的开发。对业余项目怎么想是自己的事,只要乐意一个人可以花几个月时间去学习 OpenGL 等底层图形库,写个渲染引擎、UI 框架,为什么无时无刻要抓着「市场需求」「开发效率」几个词不放呢?只不过在此基础上,希望找到一个偏好于以上各方面的权衡点罢了。

    106 条回复    2024-02-27 09:43:46 +08:00
    1  2  
    bunny189
        1
    bunny189  
       2023-07-08 10:03:40 +08:00   ❤️ 1
    其实 unity 是不是也可以写
    timicoder
        2
    timicoder  
       2023-07-08 10:05:01 +08:00
    slint?前几天看到,还没去具体研究😁
    murmur
        3
    murmur  
       2023-07-08 10:06:59 +08:00   ❤️ 1
    ReactNative 分包,开插件按需加载还空屏?
    gzf6
        4
    gzf6  
       2023-07-08 10:12:24 +08:00
    搞过 Android ,用这个上手比较快吧 https://www.jetbrains.com/zh-cn/lp/compose-multiplatform/
    Magentaize
        5
    Magentaize  
       2023-07-08 10:12:56 +08:00 via iPhone   ❤️ 1
    qt
    duke807
        6
    duke807  
       2023-07-08 10:19:03 +08:00
    wxwidgets

    电子行业,特别是开源界,特别有名的一款画电路板的软件 kicad 就是用 wxwidgets 写的

    使用系统原生 ui ( qt 不是系统原生 ui )
    ql562482472
        7
    ql562482472  
       2023-07-08 10:22:06 +08:00
    你说别的冷启动慢我本来还信了 直到我看到你说 JavaFX 冷启动慢 这个我真写过 然后我再看你上面说的感觉一点真实性都没有了
    visli
        8
    visli  
       2023-07-08 10:23:32 +08:00   ❤️ 2
    那你只能把 Delphi 从棺材里唤起来,哈哈哈哈
    everyx
        9
    everyx  
       2023-07-08 10:25:49 +08:00   ❤️ 2
    [Avalonia UI]( https://avaloniaui.net/),知道它是因为用了 Lunacy ,应该是 Linux 下唯一原生的类 Figma 的图形设计工具了,强大
    lisongeee
        10
    lisongeee  
       2023-07-08 10:26:59 +08:00
    如果 Compose Multiplatform 后续支持编译到 kotlin native , 则打包的时候无需携带 jvm
    w568w
        11
    w568w  
    OP
       2023-07-08 10:37:31 +08:00 via Android
    @bunny189 这怕是不太适合写软件吧?哈哈

    @timicoder
    @duke807
    @everyx
    感谢,稍后了解一下

    @murmur 这个确实不太了解。能介绍一下文档位置吗?

    @ql562482472 我自己确实没直接写过 JavaFX ,不过用过很多 JavaFX 写的小工具,你可以认为是刻板印象吧😂


    @lisongeee 我对 KMM 还是比较看好的,可惜生态还不行。
    zero47
        12
    zero47  
       2023-07-08 10:39:15 +08:00
    看到 OP 如此折腾还是没找到心仪的解决方案, 后端的我还是去啃 flutter 算了
    w568w
        13
    w568w  
    OP
       2023-07-08 10:56:18 +08:00 via Android
    @zero47 #12 Flutter 确实是目前跨平台最优解。可惜小问题太多,GitHub 上的 issue 堆了不知道多少,每个版本都在猛做小修小补的工作
    szzhiyang
        14
    szzhiyang  
       2023-07-08 11:10:33 +08:00
    wxWidgets
    chinuno
        15
    chinuno  
       2023-07-08 11:20:01 +08:00 via Android
    桌面平台那你看看 imgui 怎么样,速度肯定比你列的其他框架快
    hez2010
        16
    hez2010  
       2023-07-08 11:27:53 +08:00 via Android   ❤️ 2
    Avalonia 11.0: https://github.com/AvaloniaUI/Avalonia

    文档: https://avaloniaui.net/GettingStarted

    对于你说的条件全部满足,写完之后采用 NativeAOT 编译即可达到双击立即启动的水平,并且不需要携带运行时。不过注意其中 macOS arm64 架构的 NativeAOT 需要用 .NET 8 的 sdk 。

    像 Unity 、JetBrains 、GitHub 之类的厂商也都在用 Avalonia 。
    DTCPSS
        17
    DTCPSS  
       2023-07-08 11:29:43 +08:00   ❤️ 2
    Avalonia + AOT 编译
    chendadaover
        18
    chendadaover  
       2023-07-08 11:44:51 +08:00
    虽然但是, 楼主说的不就是 Flutter 吗? 各方面来讲的话, 我还没发现有能跟 Flutter 打的
    dandycheung
        19
    dandycheung  
       2023-07-08 11:49:54 +08:00 via Android
    我给你推荐个冷门一点的框架吧:JUCE 。
    loading
        20
    loading  
       2023-07-08 11:50:17 +08:00
    Dephi ,确实厉害。
    iorilu
        21
    iorilu  
       2023-07-08 11:59:59 +08:00
    正经点的就是 pyqt , 没有之一
    ggvoking
        22
    ggvoking  
       2023-07-08 12:03:43 +08:00
    qt 和 Avalonia
    muhuan
        23
    muhuan  
       2023-07-08 12:08:36 +08:00
    整体上觉得 JavaFX 还可以,使用成本比较低,启动慢了些,携带 jre ,体积大了一些,不过还能接受;

    slint 看着 nodejs cpp rust 都支持,没细看,主要看着还是 rust 为主
    pepsiwant
        24
    pepsiwant  
       2023-07-08 12:10:18 +08:00
    为什么内存占用大算作缺点啊,或者说内存占用大是缺点的外在表现?
    nikenidage1
        25
    nikenidage1  
       2023-07-08 12:13:26 +08:00
    老哥,你没看我前两天的帖子啊

    https://www.v2ex.com/t/952603
    用 .Net 写了一个跨平台的桌面端软件,且原生编译,无需运行时,启动快内存少体积小
    flyqie
        26
    flyqie  
       2023-07-08 12:18:34 +08:00 via Android
    你说的不就是 qt 吗。。
    IDAEngine
        27
    IDAEngine  
       2023-07-08 12:18:49 +08:00
    GTK4
    makelove
        28
    makelove  
       2023-07-08 12:23:10 +08:00
    delphi 还有个开源竟品,以前用过 delphi ,做做小东西很牛逼
    https://www.lazarus-ide.org/
    SenLief
        29
    SenLief  
       2023-07-08 12:27:11 +08:00 via iPhone   ❤️ 1
    不就是 c#
    NormanGhost
        30
    NormanGhost  
       2023-07-08 12:48:12 +08:00 via Android
    qt😄
    totoro52
        31
    totoro52  
       2023-07-08 12:59:49 +08:00
    delphi: 谁在敲我的棺材板
    angrylid
        32
    angrylid  
       2023-07-08 13:00:54 +08:00 via Android   ❤️ 1
    恕我直言,你需要做的唯一一件事就是戒掉矫情病。
    然后选择 Qt+CEF 或者 Electron
    Arctic2021
        33
    Arctic2021  
       2023-07-08 13:02:19 +08:00
    Qt + CPP ,楼上说得对:你需要做的唯一一件事就是戒掉矫情病。
    mmdsun
        34
    mmdsun  
       2023-07-08 13:08:40 +08:00
    微软家的 MAUI ?

    https://dotnet.microsoft.com/zh-cn/apps/maui

    或者 Electron
    chengxiao
        35
    chengxiao  
       2023-07-08 13:19:17 +08:00
    @w568w 如果 Flutter 的小问题都算多的话,那其他的跨平台框架只会问题更多
    要么 Flutter 要么 QT 吧
    lujiaxing
        36
    lujiaxing  
       2023-07-08 14:07:36 +08:00
    你这需求属实相当极端了.
    rbq123456
        37
    rbq123456  
       2023-07-08 14:13:32 +08:00
    @chengxiao 用 flutter 写 win ,linux ,mac ,认真的吗
    learningman
        38
    learningman  
       2023-07-08 14:38:24 +08:00
    Qt 为啥不行
    chengxiao
        39
    chengxiao  
       2023-07-08 14:48:01 +08:00
    @rbq123456 为什么不行?企业微信就是 flutter
    roundgis
        40
    roundgis  
       2023-07-08 14:53:34 +08:00 via Android
    @mmdsun maui 官方不支持 linux
    roundgis
        41
    roundgis  
       2023-07-08 14:54:42 +08:00 via Android
    @duke807 20 年前用過 和寫 mfc 差不多
    NoOneNoBody
        42
    NoOneNoBody  
       2023-07-08 15:00:06 +08:00
    好像除了 QT 都否决了?按这个思路,QT 理应也被否决才对啊
    dcsuibian
        43
    dcsuibian  
       2023-07-08 15:12:57 +08:00
    React Native 只是给 Android 和 iOS 用的,毕竟原理上是编译成原生组件,平台越多问题越多
    所以桌面平台一般没有 native ,还是 Electron

    目前看来 Flutter 还是最有希望的,但现状确实比较拉
    w568w
        44
    w568w  
    OP
       2023-07-08 15:46:28 +08:00
    感谢以上各位的回复,V 友们太热情了

    @chinuno 这个看文档的说法是 "is particularly suited to integration in game engines (for tooling), real-time 3D applications ... to create content creation tools and visualization tools (as opposed to UI for the average end-user)." 好像是用来做嵌入式 UI 的?

    @dandycheung 这好像是写声学应用的领域框架?

    @iorilu 能介绍一下性能怎么样吗? Python+Qt 的组合感觉不怎么正经

    @pepsiwant 重点在后半句,速度接近原生。就一般经验来说,内存占用和速度成正比?

    @nikenidage1 哈哈确实没看到,已 star

    ---

    感觉基于 C++ 的 Qt 、GTK 和 基于 C# 的 Avalonia 快成唯二解了? Delphi 好像半个身子入土了,slint 、wxwidgets 搂了一眼感觉功能性捉急……
    lujiaxing
        45
    lujiaxing  
       2023-07-08 15:52:39 +08:00
    @w568w 是的. 你这种极端需求基本上 QT / Avalonia. 其他没得选.
    missdeer
        46
    missdeer  
       2023-07-08 16:19:22 +08:00
    wxWidget 的运行速度更快,毕竟是真原生,但 API 跟 MFC 高度相似,就是上个世纪的风格,会觉得很落后难用。
    Qt 运行速度比 wxWidget 肉眼可见的慢一丢丢,比如弹出菜单能明显感觉会比纯原生的迟滞一点点,但毕竟是 C++的,还是很快的,重点是它的 API 设计得很好,比 wxWidget 好一个时代,以及官方文档和示例非常好。
    wxf666
        47
    wxf666  
       2023-07-08 16:31:26 +08:00
    @chengxiao #39 Windows 上还有哪些 flutter 应用吗?想去体验一下
    tanranran
        48
    tanranran  
       2023-07-08 16:35:27 +08:00
    @wxf666 #47 企业微信,钉钉
    wxf666
        49
    wxf666  
       2023-07-08 16:38:51 +08:00
    @everyx @hez2010 @DTCPSS 请问有哪些比较著名的 Avalonia 应用吗?想去体验一下
    ysc3839
        50
    ysc3839  
       2023-07-08 16:42:50 +08:00
    要原生跨平台的话,基本只有 React Native 了吧?不过不支持 Linux 。
    ysc3839
        51
    ysc3839  
       2023-07-08 16:47:22 +08:00
    如果只是要接近原生 GUI 框架的性能,Chromium 方案应该能满足的,Chrome Edge 启动速度都挺快的。
    要求太多的话基本只能自己写了,因为功能多通用性强的话免不了要带上自己用不到的功能,体积就会大。
    另外 Electron 和 CEF 没关系,Electron 是自己编译 Chromium 的。
    DTCPSS
        52
    DTCPSS  
       2023-07-08 16:52:21 +08:00
    putaozhenhaochi
        53
    putaozhenhaochi  
       2023-07-08 17:00:12 +08:00 via iPhone
    桌面版企业微信,钉钉用的 flutter ?
    nong99
        54
    nong99  
       2023-07-08 17:17:43 +08:00 via iPhone   ❤️ 1
    嗯…前端个人在想转桌面开发,观澜一圈~想从.net 入手,看着 C# Avalonia 作为入门目标了~ (都说 c++太难,不然都考虑 QT 了)
    tanranran
        55
    tanranran  
       2023-07-08 17:26:18 +08:00
    @nong99 #54 可以用下使用 Electron 开发的 QQ NT ,体检巨好,我几百个千人群都不咋卡
    nong99
        56
    nong99  
       2023-07-08 17:30:56 +08:00 via iPhone
    @tanranran 感谢🙏前端切换 Electron 确实成本最平滑~ 之前也是用其开发过一个站外包业务桌面软件!确实考虑深入优化成本、同时也私心想多学一门语言~可拓展性范围大些哈
    kingfalse
        57
    kingfalse  
       2023-07-08 17:40:26 +08:00 via Android
    Java 系的话要原生就 swt ,linux ,mac ,Windows 都支持,eclipse 就是用 swt 开发的
    roundgis
        58
    roundgis  
       2023-07-08 17:50:49 +08:00
    @nong99 如果你只是限定用 qt 的东西,cpp 其实也没那么难
    iorilu
        59
    iorilu  
       2023-07-08 17:58:07 +08:00
    @w568w 我自己用 pyqt 开发跨 windows 和 macos 项目的

    性能和原生没什么区别

    跨平台也不错, 我都是 windows 开发,macos 可能该几行就能编译通过
    documentzhangx66
        60
    documentzhangx66  
       2023-07-08 20:43:40 +08:00
    等你开发经验 10 年以上了,你才会明白,内存占用大,是优点。
    wxf666
        61
    wxf666  
       2023-07-08 20:48:15 +08:00
    @DTCPSS #52 感谢指路。

    体验了几个应用,感觉就像是 Win11 风格的应用。

    另外,体积、内存、CPU 等资源消耗都变大了。比如(内存占用是刚开启的起步占用):

    - 一个丑丑的播放器,体积 40MB ,内存占用 100MB+。

    - 一个搜索软件,体积 160MB ,内存占用 200MB+。(应该没索引文件,因为搜索不到)

    - 一个歌词软件,体积 460MB ,内存占用 100MB+

    - 一个 UI 设计软件?体积 160MB ,内存占用 1GB+

    感觉和用 Electron 应用差不多,笨重、软绵绵、不跟手
    renmu
        62
    renmu  
       2023-07-08 21:06:08 +08:00 via Android
    如果有,那么已经占领生态了,为什么现在主流还是 electron 呢
    mineralsalt
        63
    mineralsalt  
       2023-07-08 21:24:14 +08:00
    javafx 我真认真研究过, 用 GraalVM 可以编译成原生的程序, 内存占用可以降低到几十兆, 冷启动速度极快, 我曾用 java 开发了一个类似 Bob 的软件, 常驻后台无压力, 喜欢 java 的程序员真可以认真琢磨琢磨, 就像你列举的这些, 跨平台都有各种的问题, javafx 还是一个不错的选择
    hez2010
        64
    hez2010  
       2023-07-08 22:44:26 +08:00 via Android   ❤️ 1
    @wxf666 体积主要取决于开发者发布时有没有做代码裁减,默认不开,开了之后成品一般在 30mb 往上,不开的话 100mb 往上。
    由于是 gpu 加速渲染,渲染后端走的 angle ,内存占用确实是 100mb+。如果关掉 gpu 渲染走软件渲染的话内存占用就只会有 30mb 左右。
    至于那个 ui 设计软件,他们在内存里载入了自己的素材库和本地 ai 模型来辅助设计,内存占用自然比较大。

    不过也没什么可说的,Avalonia 的体积就是 30mb 起步,启用 angle 后端做硬件加速渲染内存占用 100mb 起步,仅使用软件渲染内存占用 30mb 起步。

    这里放两个拿 Avalonia 写的仿 vscode 的全功能代码编辑器,自带多种主题和多语言的代码高亮,一个是开启 gpu 渲染的 angle 版本,一个是采用软件渲染的 software 版本,并且采用了 nativeaot 编译,你可以试试:

    gpu 加速渲染:
    https://1drv.ms/u/s!ApWNk8G_rszRgrZ47r4LrTUlPupSRA?e=XcbR18

    软件渲染:
    https://1drv.ms/u/s!ApWNk8G_rszRgrZ5LOnqPDLtcKyrqA?e=C4AP86
    lujiaxing
        65
    lujiaxing  
       2023-07-08 23:05:13 +08:00
    @renmu 因为研发成本, 招聘难度.
    要知道 C# 和 C++ 招聘难度比前端大了一到两个量级. 哪个项目经理也不想项目开始一个月连人都招不齐吧??
    至于体积, 执行效率, 根本就不是项目经理会考虑的问题. 毕竟用户又不会交钱, 更何况现在的个人计算机哪个不是 16GB 内存起步?
    ysn2233
        66
    ysn2233  
       2023-07-09 00:18:13 +08:00
    @mineralsalt 网上有相关的文章可以借鉴么?
    saybyetoGFW
        67
    saybyetoGFW  
       2023-07-09 00:29:16 +08:00 via Android
    吃着包子。想到了既要又要还要,只能烂尾喽。开发工作,跟随主流 electron,tauri,react native 都行
    kkwa56188
        68
    kkwa56188  
       2023-07-09 00:49:42 +08:00
    QT . 很成熟的东西了, 就怕门槛高 你进不去.
    暴雪的 游戏启动器就是用 QT 做的.
    mineralsalt
        69
    mineralsalt  
       2023-07-09 01:49:49 +08:00
    @ysn2233 #66 很多啊, 搜搜就是了
    mingl0280
        70
    mingl0280  
       2023-07-09 07:59:44 +08:00
    Qt 啊……
    acctv2
        71
    acctv2  
       2023-07-09 08:40:57 +08:00
    要求原生级性能,你的应用是密集计算还是密集 IO ,还是有极其复杂的 UI ?都不是为什么要高性能框架。

    要求跨平台使用,你现在需要跨哪些平台?这个应用一定需要跨平台使用吗?

    你否掉了那么多技术栈,我只能说:你有很多伪需求
    shyangs
        72
    shyangs  
       2023-07-09 09:26:10 +08:00
    @documentzhangx66

    超出時代的記憶體佔用,會讓產品死去,比如 Windows Vista.

    開發經驗十年了,不能只站在開發者角度,只在意開發者體驗,在中國不轉管理職,為自己增加管理行銷推廣技能,很可能觸及開發年齡上限,而被裁員.
    chrawsl
        73
    chrawsl  
       2023-07-09 09:47:02 +08:00
    MAUI 不错,这两天在用这个玩意写安卓
    SaltyKitkat
        74
    SaltyKitkat  
       2023-07-09 11:14:04 +08:00
    @documentzhangx66 解释一下?
    WebKit
        75
    WebKit  
       2023-07-09 11:43:19 +08:00 via Android
    新东西,Kotlin 的 KMM😂
    FucGreatFireWall
        76
    FucGreatFireWall  
       2023-07-09 14:01:14 +08:00
    Unity 写软件好用吗
    roundgis
        77
    roundgis  
       2023-07-09 14:18:37 +08:00 via Android
    @chrawsl 感覺如何?
    wxf666
        78
    wxf666  
       2023-07-09 14:38:53 +08:00
    @hez2010 #64 试了下:

    | 应用 | 内存占用(启动后,最大化窗口为 1080P ,静置至稳定) | 内存占用(打开 sqlite3.c ,8MB ,25W 行,静置至稳定) |
    | :-----------------: | :-----------------------------------------------: | :-------------------------------------------------: |
    | Typora | 130 MB | |
    | Clash For Windows | 110 MB | |
    | Visual Studio Code | 250 MB | 450 MB |
    | EditorDemo-Angle | 70 MB | 500 MB |
    | EditorDemo-Software | 50 MB | 460 MB |
    | Notepad--( QT5 ) | 15 MB | 35 MB |
    | Notepad Next ( QT6 ) | 20 MB | 40 MB |
    | QtCreator ( QT6 ) | 70 MB | 420 MB |

    感觉内存占用差不多和 Electron 应用看齐。

    论高效省资源,应该还得是 QT 应用。
    cest
        79
    cest  
       2023-07-09 14:42:30 +08:00
    有哪个能处理好 hdr ?
    Dynesshely
        80
    Dynesshely  
       2023-07-09 14:57:04 +08:00   ❤️ 1
    推荐:

    1. Avalonia UI, 你将使用 C# + XAML 编写后台逻辑与界面, 使用 AOT 编译可以得到几乎原生的性能, 不使用 AOT 时体积可能达到几十 MB 的水平, 若要使用 AOT, 您需要至少 .Net 7, 且 Avalonia 11.0 +
    2. Egui, 你将使用 rust 编写界面代码与逻辑代码, 极其轻量化但属于即时模式的 UI 框架
    3. Flutter, 你将使用 dart 语言编写界面代码与逻辑代码, 可以达到近乎原生的性能, 也可以做到较优秀的体积水平, 缺点是, 在 win 平台上编译到 win32 似乎存在问题, 目前官方建议上架到 microsoft store
    documentzhangx66
        81
    documentzhangx66  
       2023-07-09 16:18:20 +08:00
    @shyangs

    建议去了解一下光追的发展史。

    计算机从业者要多学历史。
    documentzhangx66
        82
    documentzhangx66  
       2023-07-09 16:21:11 +08:00
    @SaltyKitkat

    什么最宝贵?时间。

    功能全面的框架,必然会浪费大量内存与硬盘存储。比如 VS 这款 IDE ,早起从编码、代码提示、多屏开发、调试、查性能瓶颈等等,ALL IN ONE ,非常方便。但它块头大,启动后也占用很多内存。

    内存与硬盘值钱,还是程序员的时间更值钱?
    hez2010
        83
    hez2010  
       2023-07-09 16:30:57 +08:00 via Android
    @wxf666 我的 tokenizer 没做虚拟化,你粘贴的代码文本是一次性全部进行高亮处理保存在内存里的,而不是只处理显示出来的那些代码。如果你想公平比较的话,建议只贴正好占一个窗口那么多的代码量。
    wxf666
        84
    wxf666  
       2023-07-09 16:35:51 +08:00
    @documentzhangx66 #82 那么,那些号称体积小、占用内存小、性能接近原生的框架,发展方向错了?

    比如,一个文本编辑器,应该大力宣传:

    - 安装包 1GB+,但功能全面
    - 内存占用 10GB+,但功能全面
    - 运行较慢,但功能全面




    另外,以后都 GPT 自动生成代码了,程序员的时间不值钱了

    隔壁不是有个说,1 元钱,能自动生成全套包含产品文档、架构设计、代码的完整 repo 了么
    wxf666
        85
    wxf666  
       2023-07-09 17:31:03 +08:00
    @hez2010 #83 没有吧。。

    vscode 右边的缩略图全部都染色了(刚打开文件,要等几秒钟才染色。之后随便疯狂拖滚动条都没事了)。

    Notepad++ 的话,第一次滚动到文件末尾,确实卡了七八秒。但之后就能随便疯狂拖滚动条了。

    Notepad--、Notepad Next 、QtCreator ,随便疯狂拖滚动条也没事,甚至还有层次折叠。

    如果每次都只处理显示出来的代码,那怎么知道是不是在 /* */ 注释里呢?甚至还知道在哪个层次里,该层次有没有被折叠。。



    另外,我发现 Notepad-- 甚至会解析 #ifdef 之类的宏块,未定义的块甚至会暗淡。。

    如果在开头写个 #ifdef abcdefg ,结尾写个 #else /* else */ #endif ,那么就只有这四行深色,其他 25W 行都是浅色。。



    好吧,所有应用都缓慢拖动滚动条,从顶至底,又回到顶部,反复十次。

    尽量确保每一处代码都分析完毕并渲染过后,再测量内存:

    | 应用 | 内存(最大化,反复缓慢拖动滚动条至两端十次,再静置至稳定) |
    | :-----------------: | :--------------------------------------------------------: |
    | Visual Studio Code | 510 MB |
    | EditorDemo-Angle | 800 MB |
    | EditorDemo-Software | 720 MB |
    | Notepad++ | 30 MB |
    | Notepad-- | 40 MB |
    | Notepad Next | 50 MB |
    | QtCreator | 440 MB |

    不知为啥,你的内存占用还膨胀了。。

    按理说,已经预先缓存所有高亮代码了,后面应该不会再涨内存了?(就像其他 5 个应用一样)
    hez2010
        86
    hez2010  
       2023-07-09 17:48:53 +08:00 via Android
    @wxf666 估计哪里的内存没释放吧,其实你反复切换语言内存也会一直往上涨不会往下掉,这得跑 memory profiler 才能知道原因,数据结构好好设计一下的话是可以做的内存占用几乎维持刚启动时占用不变的,不过这是个随便写的 demo 无所谓了。
    Avalonia 的话有个 80mb 左右的常数内存占用,再往上就看代码的算法和数据结构了,和框架本身关系倒不是很大。
    notepad 那俩毕竟是下了大功夫优化了占用的 app 。
    wxf666
        87
    wxf666  
       2023-07-09 18:20:41 +08:00
    @hez2010 #86 其实也没太大所谓了。


    首先,这几个编辑器里,确实也就 你的 和 vscode 好看些。赏心悦目嘛,自然要付出些代价。

    而且,以后内存越来越便宜,多占点少占点也差不太多。

    主要是我现在的笔电,内存是焊死的,加不了内存,我才比较在意。以后换电脑后,也就无关紧要了。

    另外,这个也是未来的趋势,连微软都用 WebView2 来写一堆自带应用了。。


    你的再加点点功能,当个日用编辑器也挺好的:

    - 启动比 vscode 快
    - 比其他编辑器好看
    - 几十万行文本处理也不慢(至少比 Notepad++ 卡七八秒快),占用内存也可接受(几百 MB )

    总之,技术也挺厉害的了,写的 demo 差不多也算是成品了
    documentzhangx66
        88
    documentzhangx66  
       2023-07-09 18:23:47 +08:00
    @wxf666

    发展方向,并没有对错。当初 FC 在被编码时,各种优雅的实现方式,那已经不是编程,而是一件件艺术品。

    但是,如果每一个计算机软件项目,都想做成艺术品,那么像 QQ 这种级别的软件,也许等我们老了,也做不出来,因为工程量太大了。

    所以,我们应该考虑,根据项目实际需求出发,在经济与时间能够确保项目不失败的前提下,先把需求都实现了,然后再进行体积的压缩、减少内存占用。这样既能保证产业的发展与延续,又能实现你们自己对体积、内存使用量的追求。

    最后,GPT 现阶段的确能够做出一些学生级别的作品。但如果你参与过正规大型工程项目,GPT 这种连测试都还要专门去提醒才会去实现,目前阶段是没办法抢了专业程序员的饭碗。不过我相信它未来还是会更强大的,但到了那个阶段,楼主的问题,很可能会发生变化。
    yangxin0
        89
    yangxin0  
       2023-07-09 19:15:47 +08:00
    我觉得下一个时代一定是 webgpu + h5 + electron
    yangxin0
        90
    yangxin0  
       2023-07-09 19:16:17 +08:00
    figma 打好了样,webgpu 1.0 才正式到来。
    lyping
        91
    lyping  
       2023-07-09 20:19:31 +08:00
    为什么都不提 QT?
    songray
        92
    songray  
       2023-07-09 20:27:36 +08:00
    真有这好东西的话, 原生方案早就死绝了.
    soap520
        93
    soap520  
       2023-07-09 23:12:33 +08:00
    godot
    SolarHurricane
        94
    SolarHurricane  
       2023-07-09 23:22:43 +08:00 via iPhone
    SDL2 有了解过吗
    nine
        95
    nine  
       2023-07-10 00:38:24 +08:00
    看到都说 Delphi 要进棺材了,那我就可以放心用了。
    chinuno
        96
    chinuno  
       2023-07-10 08:01:20 +08:00 via Android
    @w568w 还没见过把 imgui 用在嵌入式上的。文档想说的大概是因为是立即模式的 GUI 所以可以很方便的就集成到游戏里做调试 ui 用。但是除此之外也能用来写单独的 gui 软件,他的 github 页面上就列了不少用 imgui 写的工具
    holulu
        97
    holulu  
       2023-07-10 08:40:33 +08:00
    https://platform.uno/
    wildlynx
        98
    wildlynx  
       2023-07-10 08:52:36 +08:00 via iPhone
    用 gtk 那些人开发的 Vala 语言开发 GTK 感觉如何?
    lanten
        99
    lanten  
       2023-07-10 10:44:09 +08:00
    目前也没有哪个 ui 描述方案能比 html 更高效,灵活性和开发体验没得说,缺点是开销大。如果你的应用需要常驻内存,但不需要频繁的 gui 交互,tauri 是个不错的选择,浏览器窗口用完即毁,在不打开 webview2 的情况下,主进程内存占用通常不超过 10M
    jones2000
        100
    jones2000  
       2023-07-10 10:44:32 +08:00
    能力差就用浏览器套壳 h5 。
    能力强的选 c++ 和 object-c, 了解下每个平台的画布接口,基本都差不多 , 找几个开源的, 自己需要什么控件,直接代码拷过来不就可以了, 需要什么就拷什么, 这样编译出来的执行文件小,内存占的也小。
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2769 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 11:40 · PVG 19:40 · LAX 03:40 · JFK 06:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.