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

最近好多 GUI 之争,我来给 Electron 站一票,理性讨论

  •  2
     
  •   Loxon · 352 天前 · 20673 次点击
    这是一个创建于 352 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近看到几篇类似的讨论: https://www.v2ex.com/t/1005711 https://www.v2ex.com/t/1005903

    正好我也面临类似的问题,合理讨论下,先说明下需求:

    1. Win+Mac+移动端 桌面端为主用户群体,移动端会简单一些
    2. 工具类产品,除了 GUI 层面的需求外,核心功能会用到原生 OS 的 API ,所以各端必然有小部分核心代码是不一样的
    3. 整体 App 属于中等 App ,所以我不严格追求包大小,在我看来桌面端 50M~200M 都属于用户能接受的中等 App 的范畴
    4. App 里绝大部分以界面交互为主,Webview 有但也有限,可能仅仅辅助使用;性能要求也不高;
    5. 不希望用户主动安装依赖(之前基于.Net 开发的 Win App 需要用户手动安装依赖的痛苦回忆...)

    基于以上需求,感觉 Electron 是最适合的,有没有人提供下不同的思路见解?

    138 条回复    2024-04-10 11:41:30 +08:00
    1  2  
    shuax
        1
    shuax  
       352 天前   ❤️ 29
    我投 flutter 一票
    xausky
        2
    xausky  
       352 天前
    https://webui.me/ 这个方案挺好的,唯一的问题是浏览器窗口归属浏览器应用,而不是自己这个应用
    sunjiayao
        3
    sunjiayao  
       352 天前
    flutter 是不是也能开发桌面应用
    debuggerx
        4
    debuggerx  
       352 天前   ❤️ 2
    我投 flutter 一票
    Loxon
        5
    Loxon  
    OP
       352 天前
    @shuax @debuggerx 如果基于我上面说的需求下,能请教下 Flutter 的优势吗?确实怕再踩坑
    debuggerx
        6
    debuggerx  
       352 天前
    @Loxon 优缺点和对比已经说烂了,该不认同的还是不会认同,只会一直争下去,实在懒得说了……所以出来投一票表个立场而已。
    ramoudev
        7
    ramoudev  
       352 天前
    Electron 开发,多窗口多进程交互麻烦的要死
    nielinjie
        8
    nielinjie  
       352 天前   ❤️ 1
    kmp ,有喜欢的没?
    clue
        9
    clue  
       352 天前   ❤️ 5
    我认为未来是 web 的, 大统一 UI 标准, 迄今为止最全面用的人最多的

    举个类似的例子, 以前在 nodejs 兴起的时候, 因为 js 程序员的受众巨大, 导致能被 nodejs 重写的插件几乎都被重写了
    而现在也有这个趋势, 比如开发代码连接蓝牙比较繁琐, 在 nodejs 下使用的是 noble 这个库, 而 w3c bluetooth api 标准发布后, 没多久社区就有人将它包装为标准 api , 使得 nodejs 开发可以与 web 对齐
    sunjiayao
        10
    sunjiayao  
       352 天前
    @debuggerx 比如说?有哪些帖子或者文章比对过?
    thinkm
        11
    thinkm  
       352 天前
    flutter 多线程支持太拉了,要不然我也选 flutter
    qinjiang
        12
    qinjiang  
       352 天前
    支持 electron
    blankmiss
        13
    blankmiss  
       352 天前   ❤️ 1
    不支持 electron ,不想要多个浏览器 只要一个就够了
    roundgis
        14
    roundgis  
       352 天前 via Android
    @nielinjie 打算用
    oldManNewThought
        15
    oldManNewThought  
       352 天前 via Android
    桌面端,我选 tauri
    ysc3839
        16
    ysc3839  
       352 天前 via Android   ❤️ 2
    我也推荐 Electron ,但是有的人就是纠结文件大小
    yolee599
        17
    yolee599  
       352 天前   ❤️ 4
    我投 Qt 一票,wxWidgets 一票
    Knights
        18
    Knights  
       352 天前
    支持 electron
    mxT52CRuqR6o5
        19
    mxT52CRuqR6o5  
       352 天前
    我也是看好 web 类的方案,但不知道会不会有比 electron 更优秀的框架
    Mogugugugu
        20
    Mogugugugu  
       352 天前   ❤️ 2
    我选 electron ,因为技术栈匹配度高,但是我投 Compose Multiplatform 一票,没什么,单纯希望他们打起来。
    Yjhenan
        21
    Yjhenan  
       352 天前   ❤️ 2
    avalonia 用 aot 编译,不用再装 .net 了吧?其 hello world 的 aot 产物用压缩包压缩下,也只有 10 兆大小
    wyl986
        22
    wyl986  
       352 天前   ❤️ 2
    electron 有一个好处:就是把一些 electron 特有的 API (主要是调用硬件的)直接绑在 window 上,然后用 electron 套一个网页;更新的话直接更新网页,可以避免更新整个 electron ,而且还可以无感强制更新; electron 打包之后再小也有 50m+,用户量大了 cdn 流量也遭不住
    icyalala
        23
    icyalala  
       352 天前   ❤️ 7
    作为开发来说,我也推荐 Electron ,甚至 Flutter 我觉得也是可选的。
    但从用户角度出发,我只想要原生的 App 。
    davidjqq19
        24
    davidjqq19  
       352 天前
    Electron 就是安装包大了点,写个 Hello World 都得几十 M ,其他没啥毛病。
    sheeta
        25
    sheeta  
       352 天前   ❤️ 2
    作为用户我不支持 electron ,我可不想在我的电脑上塞 N 多个 Chrome 。
    nno
        27
    nno  
       352 天前
    我投 egui
    adoal
        28
    adoal  
       352 天前   ❤️ 2
    作为用户我只想用原生 app……但是想到我很少为优秀的原生 app 付钱,那么,作为雪花,我不是无辜的
    leaflxh
        29
    leaflxh  
       352 天前
    我觉得 electron 能像 Java JRE 一样,出几个稳定版的浏览器包作为运行时就好

    这下就像安卓的"快应用了"
    leaflxh
        30
    leaflxh  
       352 天前
    @leaflxh

    同时操作系统预装,类似于安卓的 webview
    dbskcnc
        31
    dbskcnc  
       352 天前   ❤️ 1
    loginv2
        32
    loginv2  
       352 天前
    我推荐 core + webui 。这样 java 也好 python 也好,或者其他什么语言都是打包一个环境 然后该干的活后台干,前台交给浏览器。如果需要 UI 实现某些特性,单独用特定平台的 webview 技术来做维护
    Worldispow
        33
    Worldispow  
       352 天前 via Android   ❤️ 20
    从用户角度来看,electron 就是一坨屎。

    v2er 也挺有意思的,app 占空间大就狂喷,轮到自己成为开发者时又不在乎大小了。
    lstz
        34
    lstz  
       352 天前 via iPhone
    electron 太过笨重,实际上绝大多数应用都只需要一个单窗口,所以我更推荐 PWA 或者轻量级 web 桌面框架

    至于用户体验,我认为除了真正程序上的 benchmark ,更多与用户交互也是强相关的。

    最近在做一个开源项目,https://github.com/work7z/LafTools ,计划也是用轻量级 web 实现,曾经无数次想用 native UI ,但框架少库少,让我实在不敢赌
    pursuer
        35
    pursuer  
       352 天前
    现在 Electron 支持移动端了吗?以前我记得是不支持的
    Bingchunmoli
        36
    Bingchunmoli  
       352 天前 via Android   ❤️ 1
    作为用户反感 Electron.
    elevioux
        37
    elevioux  
       352 天前
    在写 python 脚本调 chatgpt 接口的时候,想做一个简单的对话窗口。

    看了一下 pyqt,tk 文档,看着烦。

    直接用 pyqt 的 webview ,再写一个 jsbridge 让 浏览器 js 和 python 能够通信,就这么用着了。
    superchijinpeng
        38
    superchijinpeng  
       352 天前
    我投 Tauri 一票
    jones2000
        39
    jones2000  
       352 天前
    不都是套壳浏览器吗?
    hanxiV2EX
        40
    hanxiV2EX  
       352 天前 via Android
    zed1018
        41
    zed1018  
       352 天前
    我对 flutter 本身没有什么负面看法,但是我觉得 Dart 是真的丑,我接受不了
    xarthur
        42
    xarthur  
       352 天前 via iPhone
    写一个跨平台的 GUI 库需要的工作量太大了,所以要不用浏览器,要不用放弃跨平台吧。
    buf1024
        43
    buf1024  
       352 天前
    这个问题没有最优解,只有适合和不适合自己或公司的技术栈,因为以上所以的技术栈都能完成对应需求,当然也有自己的优点和坑。对于 flutter 来说,桌面端的支持不并是很完善,比如多窗口等等都没有完善的支持,很多功能都是第三方插件支持的,而且,官方并将桌面的的优先级放到比较低的位置。所以如果采用 flutter 开发桌面端,必定会踩很多坑,不过这都不是什么大问题,一般都有解决方案,如果没有解决方案,自己也可以通过插件完善。

    自己之前尝试用 flutter 写写桌面端,感觉还行,参考: https://github.com/buf1024/hiqradio
    liuw666
        44
    liuw666  
       352 天前 via iPhone
    开发推荐 electron 。虽然我正在写 electron 客户端,但是电脑上 electron 的客户端能不装我就不装
    ChrisFreeMan
        45
    ChrisFreeMan  
       352 天前
    我差一点就上了 flutter 的船了,直到它的开发工具和 Chrome 绑定。
    maxxfire
        46
    maxxfire  
       352 天前
    相比臃肿和 dart 而言,我选择臃肿,毕竟以后臃肿有可能会被集成至操作系统
    GeekGao
        47
    GeekGao  
       352 天前
    我用 webview 自己封装
    SmartTom
        48
    SmartTom  
       352 天前   ❤️ 1
    Qt ,看了半天好像没人用
    murmur
        49
    murmur  
       352 天前   ❤️ 2
    除了苹果用户还有人介意 electron 的尺寸么,tb 级硬盘不是想装几个 chrome 装几个,32g 内存愿意开几个就开几个
    jeevSong
        50
    jeevSong  
       352 天前
    @xausky 这个很有趣呀,我倒觉得 UI 统一放在浏览器中挺好的
    remember5
        51
    remember5  
       352 天前
    作为开发,我选 Electron ,作为用户,Electron 的应用我尽量不装
    duanxianze
        52
    duanxianze  
       352 天前   ❤️ 9
    这帖子很多人不要自顾自的代表用户,市场已经证明了大多数用户并不在乎多出那几百兆的空间,实际上的问题是很多人 Electron 用的太差了,导致卡,用 qt 之类的门槛高,排除了很多技术不行的程序员。
    就我个人来说,并不在用啥技术,老板给钱就行
    duanxianze
        53
    duanxianze  
       352 天前
    这帖子很多人不要自顾自的代表用户,市场已经证明了大多数用户并不在乎多出那几百兆的空间,实际上的问题是很多人 Electron 用的太差了,导致卡,用 qt 之类的门槛高,排除了很多技术不行的程序员。
    就我个人来说,并不在用意啥技术,老板给钱就行
    bigtear
        54
    bigtear  
       352 天前
    不可否认 electron 等前端技术写客户端是一个大趋势,
    好多人不喜欢 electron 的原罪就是一个软件带一个 chromium 内核在硬盘上。

    很多人认为会有文件重复,但如果系统支持写时复制( Copy-on-Write ),相同的文件在底层只会保存一份。
    虽然可能内核版本不同,不同文件也有不少,但多少会让现状有所改善。

    MacOS 的 APFS 支持 cow ,反观 Windows 的 NTFS 不支持所以会占用大量存储空间,
    但 Mac 和 PC 的硬盘价格也差距悬殊...

    DISM++ 有个硬链接合并的功能可以合并重复文件,但它主要是针对系统做优化的。

    还是希望 Windows 能早日原生支持那些高级文件系统吧。
    (要是 Windows 12 能用上我就立马从 Windows 10 钉子户升级😶)

    现在好像只有一个社区开源的驱动 [WinBtrfs]( https://github.com/maharmstone/btrfs) 让 Windows 能用上支持 cow 和透明压缩的 btrfs 文件系统,但目前对系统盘使用 btrfs 文件系统的支持也不是很完善。
    Norths
        55
    Norths  
       352 天前
    wails ,写了好几个工具了
    lwlizhe
        56
    lwlizhe  
       352 天前
    话说 QT 为啥没人提啊,我们给桌面端推 Flutter ,结果被 QT 打败了……结论上是 flutter 在桌面端还是有几个挺致命的问题的,QT 大家都不选的原因是啥?
    huangliu
        57
    huangliu  
       352 天前
    我近半年用得比较多的是 wails ,刚好最近写了篇关于基于 webview 的 app 框架的一些个人观点。打算过两天发 v 站上给大家多一个参考
    renmu
        58
    renmu  
       352 天前 via Android
    没有我 electron ,那些 Linux 能有跨平台应用(狗头
    ggvoking
        59
    ggvoking  
       352 天前
    作为用户,我很讨厌 electron ,能有其他非 electron 替代品的 app 都会优先考虑。我自己平时做些工具就 Avalonton 和 Qt 。.net 是可以不需要用户安装环境的,就是可执行文件大些,但是远比 electron 更小更优。
    ggvoking
        60
    ggvoking  
       352 天前
    @ggvoking 打错了,是 Avalonia
    debuggerx
        61
    debuggerx  
       352 天前
    [ [译] macOS 上 Flutter Desktop 与 Electron 的性能对比]( https://juejin.cn/post/7018450473292136456)
    虽然比较老的测试了,但是 Electron 对比 flutter 的资源占用差距可能比一些人以为的还要大。
    wjd2002
        62
    wjd2002  
       352 天前
    我的 PC 端 ui 开发推荐列表:
    1 、老电脑,配置低,推荐:Delphi 、Qt
    2 、轻量级应用,比如:数据编辑、Oa 应用等,推荐:C#、Qt 、electron (不熟,应该算 web 类的吧)
    3 、偏底层控制类应用,推荐:Qt
    最后,windows 平台推荐 C#,跨平台应用推荐 Qt (软硬通吃,横跨 windows 、linux 、mac 、android 、ios ,c++底座)客户端开发基本全包了。
    wjd2002
        63
    wjd2002  
       352 天前
    在 windows 平台下使用.Net 开发软件还是比较舒服的,打包后已经把运行时包都含进去了,比较都是微软自己的东西,兼容性基本不是问题,无论 C#/VB.NET/VC++都行。
    Phishion
        64
    Phishion  
       352 天前
    用 Electron 写的 Postman 性能跟渣一样,又慢又费内存又占空间,对比 Paw 秒开高下立判,mac 上的 Steam 也非常烂,一个游戏启动器就能占用内存 1.5G
    除了给开发者省事一无是处的东西。
    debuggerx
        65
    debuggerx  
       352 天前   ❤️ 1
    @lwlizhe QT 难啊,C++对比 ts\dart 难了多少,开发者数量也少至少一个量级吧?

    PyQt 倒是简单了,但是运行效率到打包产物尺寸,跟 Electron 差不多了。

    再来 QtWidgets 开发效率低,QtQuick 推广差资料少,Qt 项目打包部署解决依赖问题也比 Electron 和 flutter 这些麻烦,所以很多 Qt 项目适合定制系统和设备上运行,真想跨平台还得多花些精力。
    wjd2002
        66
    wjd2002  
       352 天前
    @wjd2002 在 windows 平台下使用.Net 开发软件还是比较舒服的,打包后已经把运行时包都含进去了,比较都是微软自己的东西,兼容性基本不是问题,无论 C#/VB.NET/VC++都行。
    PTLin
        67
    PTLin  
       352 天前
    web 太成熟了,不选择 eletron 的原因可能是不喜欢糊 web 那套东西,喜欢更现代“gui”的开发体验
    thomas15425
        68
    thomas15425  
       352 天前
    Qt + 1
    mgrddsj
        69
    mgrddsj  
       352 天前 via Android
    @bigtear #54 Windows 其实支持一个新的文件系统,叫 ReFS ,它也支持 CoW 的。不过它好像只有在 Pro 和 Server 版本的 Windows 才能用,而且一直没怎么推广,并不知道是什么原因。不过你有兴趣或许可以试试。
    但我不认为文件系统级的 CoW 能解决多份 Electron 内核存在硬盘上的问题,毕竟每个版本的差异还是挺大的,以及这需要文件系统实时或定期 dedup 才行,毕竟这些文件不是复制的。
    ----------
    我作为用户倒不太在意 Electron 的硬盘占用问题,只是觉得它的内存占用率有点令人难受,以及讨厌写得差的 Electron 应用的迟钝、笨重感(特别是 Microsoft Teams )。
    开发方面,我正在学习 Qt ,并且也投它一票,它大概是目前各方面都比较平衡的一个选项了。不过未来我会期待 Compose Multiplatform.
    tinybug
        70
    tinybug  
       352 天前
    此问题无解,我投大家自己熟悉的
    zhch602
        71
    zhch602  
       352 天前
    @Worldispow 这不是很正常的么,屁股决定脑袋,难道你是个圣人天天为别人着想
    Worldispow
        72
    Worldispow  
       352 天前 via Android
    @zhch602 不好意思,我不是开发者,我是用户。
    stinkytofu
        73
    stinkytofu  
       352 天前
    当你们还在争论的时候, 我已经用 javafx ( openjfx ) 交付客户端挣到钱了。推荐熟悉 java 的人用。
    EngAPI
        74
    EngAPI  
       352 天前
    因为没类似软件用,我面向 chatgpt 写了个很简单的 lazarus 程序,找到了当年 delphi 的感觉,据说这货还能在 android 上用.
    andytao
        75
    andytao  
       351 天前
    GLib/GTK + Vala(C# 原生版)写跨平台应用挺好的呀

    袋鼠数据库工具就是用 GLib/GTK + Vala 写出来的,它已经是一个和 GIMP / Inkscape 比肩的一线大项目了,欢迎各位考察这个技术栈。
    andytao
        76
    andytao  
       351 天前
    https://www.datatable.online/zh/blog/001-why-choose-vala.html
    miaomiao888
        77
    miaomiao888  
       351 天前
    卖菜的不吃自家菜
    我怀疑你们有些开发者 面向浏览器编程的软件 自己都不会用。
    vvdsaa
        78
    vvdsaa  
       351 天前
    @xausky #2 这么一说,mac 上把网页保存为 app 的功能还挺有前瞻性的
    langhuishan
        79
    langhuishan  
       351 天前
    @Norths wails 每个应用会在 c 盘生成一个程序名.exe 的文件夹搞的和病毒似的,这个有解决方法吗?
    rekulas
        80
    rekulas  
       351 天前   ❤️ 1
    相反我投一个反票,electron 大大降低了产品的成功概率,因为现在的小白用户都学精了,会尽量避免选择 e 系全家桶

    作为一个 electron 用户,有些软件只有 electron 版本,不得不捏着鼻子用,包括 joplin 钉钉 vscode 等,除了这些必需软件,我不会安装任何 electron 开发的东西,因为 electron 到目前为止都存在卡死问题,没有任何一个团队能优化该问题

    所以在我看来 如果你用其他方案开发,可能只是节奏慢点,但用 electron 开发,基本就定了死刑了
    cheneydog
        81
    cheneydog  
       351 天前
    我支持 Electron
    wangxiang
        82
    wangxiang  
       351 天前
    开发我选 electron ,使用我选原生。
    nowgoo
        83
    nowgoo  
       351 天前
    @langhuishan 我咋没遇到这个问题,展开讲讲?
    winson030
        84
    winson030  
       351 天前
    请教一个问题。
    vscode 优化的这么好,调教过的 electron 代码有没有可能贡献到 electron 上面?
    这样大家都能享受丝滑的 electron 了。
    acctv2
        85
    acctv2  
       351 天前 via Android
    @rekulas 想多了,小白根本不知道你用啥做开发的好吧。只有那些数码圈小白才在意这个。
    rekulas
        86
    rekulas  
       351 天前
    @acctv2 现在是 2024 年 不是 2014 年
    举个例子,某笔记软件更新为 electron 之后性能严重下滑,网上也有用户询问为什么突然变卡了,但这只是冰山一角,如果你有幸加入过他们的用户群,就会发现早有用户总结出了变卡的版本号,变卡的原因( electron ),这些人都不是专业开发者,但他们已经开始注意并分析这个问题了(说实话我刚看到的时候也很惊讶,小白用户居然也知道 electron 和原生的区别了)
    这些信息在老用户中间不断飞速传播,以至于不少老用户拒绝使用新版本-过了 2 3 年了还在坚守老版本
    如果开发者对“小白”的固有印象再不升级,迟早会被淘汰
    NewMoorj
        87
    NewMoorj  
       351 天前
    @acctv2 口碑就是从不在乎开始败掉的
    Maboroshii
        88
    Maboroshii  
       351 天前
    Linux 用户支持 electron ,但是 chrome 上游早点支持 wayland 输入法...
    whileFalse
        89
    whileFalse  
       351 天前 via Android
    QT 的主要优势在于过滤了傻逼。
    大牛用 QT 搞得好,用 electron 搞得又快又好。

    不过话说回来,electron 的主要问题不是太占内存么,有事没事开 tm 一堆渲染进程。
    James369
        90
    James369  
       351 天前
    @rekulas web 的性能问题是不是可以,将核心处理用 C/C++来解决,同时还可以隐藏代码实现,两全齐美
    onice
        91
    onice  
       351 天前   ❤️ 1
    即使是你用 electron 开发,但大多数普通用户根本不会知道你用什么开发。

    大多数时候,GUI 并不会要求性能。所以,我个人来说是支持 electron 的。
    Betsy
        92
    Betsy  
       351 天前 via iPhone
    借楼问下,QT 有好用的 UI 库吗?自己不太会写 QSS (搞出来的太丑了)
    Betsy
        93
    Betsy  
       351 天前 via iPhone
    @Betsy 最好是支持 C++ 的
    KleinP
        94
    KleinP  
       351 天前
    建议 v 站搞个投票功能
    nikenidage1
        95
    nikenidage1  
       351 天前
    不得不说,v 站用户好多见识少的,这么多楼了竟然没有推荐.NET 的,现在的.NET 的 GUI ,可以跨平台,并且 aot 编译,无需运行时,启动速度快,占用内存少
    mustwin
        96
    mustwin  
       351 天前
    .net MAUI 呀,不仅支持 Windows Linux macOS ,还支持 android 和 iOS 。
    这是我用 MAUI 开发的项目,AI 超元域: https://github.com/win4r/AISuperDomain
    ShuWei
        97
    ShuWei  
       351 天前
    web 在构建页面这一块,又快又好,所以不复杂的需求,我会选择 web ,使用 Tauri 打包一下。如果是对渲染性能、数据处理性能、系统底层交互、资源占用敏感的场景,就还是选择各平台个性化的方案了,但是往往开发速度就不像 web 页面那般快了
    jsq2627
        98
    jsq2627  
       351 天前
    几十年来,web 一直都不是最优秀的 GUI 技术,但却是生命力最强的。
    IvanLi127
        99
    IvanLi127  
       351 天前 via Android
    我会从 Tauri 和 Electron 之间二选一。简单 UI 选 Tauri 减少应用体积,复杂 UI 选 Electron 避免花时间在跨 Webview 。
    Perry
        100
    Perry  
       351 天前 via iPhone
    Slack, Discord, Microsoft Teams, 1Password 都是 Electron ,是我 React ecosystem 用惯了也是首选 Electron 。
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2726 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 07:55 · PVG 15:55 · LAX 23:55 · JFK 02:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.