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

现在桌面端的主流技术栈有怎样的?

  •  
  •   raylei · 2023-07-23 22:52:51 +08:00 · 7663 次点击
    这是一个创建于 519 天前的主题,其中的信息可能已经有所发展或是发生改变。

    很久没有玩桌面端了,还停留在以前 mfc 记忆中。知道桌面端的技术栈在这些年已经天翻地覆了,mfc 也没人用了。所以想请问一下,如果你来开发 win 的桌面端,会使用怎么样的技术栈来实现呢?

    76 条回复    2023-07-28 10:25:17 +08:00
    mokiki
        1
    mokiki  
       2023-07-23 22:55:00 +08:00   ❤️ 1
    Qt C++
    mineralsalt
        2
    mineralsalt  
       2023-07-23 22:56:00 +08:00   ❤️ 3
    现在主流就是套壳浏览器, 真的是非常的恼人。
    lsk569937453
        3
    lsk569937453  
       2023-07-23 22:57:40 +08:00
    如果不跨端,只做 windows 桌面应用。那只有 WinForms 这一个最优解。

    如果跨端,看你会什么。

    会 c++,就 QT ,性能强,缺点是得折腾(玩 c++不就是为了折腾?)。
    会 node.js+前端,就 electron ,缺点是打出的包 size 很大.

    ps:最近在学 rust,发现 tauri 也挺好用的,打出的包挺小的。
    cnbatch
        4
    cnbatch  
       2023-07-23 22:58:30 +08:00   ❤️ 1
    MFC 时代不是还有 Qt 和 wxWidgets 嘛,这两个现在仍然活着。虽然有不少竞争技术,但 Qt 仍然未没落。
    akira
        5
    akira  
       2023-07-23 23:03:14 +08:00
    看需求。 大部分需求,套个浏览器就足够了。
    xtreme1
        6
    xtreme1  
       2023-07-23 23:30:54 +08:00
    套壳 avalonia qt
    zsxzy
        7
    zsxzy  
       2023-07-23 23:42:27 +08:00
    duilib 小巧好用, 还基于 mfc, 一个字, 稳
    westerndream
        8
    westerndream  
       2023-07-23 23:48:45 +08:00
    感觉可以关注下 webview2 ,就类似安卓 webview 那样的,共用 edge 内核,解决了像 electron 那样打包一堆 chromium
    x77
        9
    x77  
       2023-07-23 23:57:36 +08:00
    - 原生,技术比较专业的 QT 比较多。GTK 的也有,但是很少。

    - .NET ,微软系的 UWP 、WPF ,不过第三方用 .NET 搞桌面的也不多见。

    - 基于 Web 框架,个人不看好,不过有的搞得挺好

    - 跨平台框架,像 Flutter ,比较早期,这类优势明显,比较有潜力
    owen800q
        10
    owen800q  
       2023-07-24 00:25:38 +08:00 via iPhone
    Pake, 好像也是 webview 套, 但只有几 m 大小
    raylei
        11
    raylei  
    OP
       2023-07-24 00:41:01 +08:00
    @akira 感觉现在就这样,好像好多都是基于浏览器,js 打遍全宇宙
    raylei
        12
    raylei  
    OP
       2023-07-24 00:42:23 +08:00
    @mineralsalt 对吧,研究一翻后感觉好多都是用 js ,所以非常迷惘来开了个贴
    flyqie
        13
    flyqie  
       2023-07-24 01:50:41 +08:00 via Android
    要么 qt 要么 electron 。

    其他的都不适合跨平台商业化项目。
    17681880207
        14
    17681880207  
       2023-07-24 02:11:06 +08:00   ❤️ 1
    为啥大家都这么在意 Electron 打包之后的这点 size ,就算大,也没有大到离谱吧,我个人认为这点体积的安装包,还没有达到让用户可以拒绝的地步吧。相反,带来的跨平台的效率优势,我觉得 Electron 反而更值得投入了~😁
    2wex
        15
    2wex  
       2023-07-24 02:19:02 +08:00
    @17681880207 大小不是根本问题,问题是大量不必要的冗余,这对优化强迫症来说是非常痛苦的(而且极客们基本都是优化强迫症)
    codehz
        16
    codehz  
       2023-07-24 02:36:23 +08:00 via iPhone
    3202 年了,XAML Island 也可以做到几百 k 左右大小了
    putaozhenhaochi
        17
    putaozhenhaochi  
       2023-07-24 07:51:51 +08:00 via iPhone
    浏览器里写 UI 是最简单和速度的
    thinkm
        18
    thinkm  
       2023-07-24 08:38:15 +08:00   ❤️ 5
    @17681880207 99%的普通用户不会在意这些东西,对他们来说只是点一下下载,点一下安装的事情, 现在千兆宽带的时代,20M 和 200M 的安装包下载时间就差个几秒钟,用户根本体会不到。反而他们会觉得 UI 很好看,比你什么 20M 用 QT 写的好看和现代很多。
    只有程序员或者极客才去关注大小之类的,然后拿到网上说。
    loading
        19
    loading  
       2023-07-24 09:00:30 +08:00
    如果是简单应用,eletron 最简单,但交互要简单,像 MFC 的拖放 table 或者 tree 控件,一般人用 eletron 却很难写出类似的体验。

    有些比较菜的 boss ,你安装包越大,他觉得越牛。(嗯,确实花功夫了。。。)
    jearyvon
        20
    jearyvon  
       2023-07-24 09:39:36 +08:00
    QQ 都用了类似 electron 了 vscode 也是 electron 。缺点对用户来说很明显。优点对于开发和公司来说太明显了。
    mmdsun
        21
    mmdsun  
       2023-07-24 11:10:17 +08:00
    darknoll
        22
    darknoll  
       2023-07-24 11:12:43 +08:00
    只有 Electron
    blinue
        23
    blinue  
       2023-07-24 12:10:59 +08:00
    @codehz #16 为了美观肯定要上 WinUI ,最终体积在 25M 左右。只面向 Win11 可以用 dynamic dependency 引入。
    codehz
        24
    codehz  
       2023-07-24 12:16:17 +08:00
    @blinue 用这个,可以做的很小 https://www.nuget.org/packages/Mile.Xaml
    blinue
        25
    blinue  
       2023-07-24 12:29:35 +08:00
    @codehz #24 我也在关注,和原生体验有差别,因为 WinUI 有很多自定义控件,而这个项目只移植了样式。我的 demo: https://github.com/Blinue/Xaml-Islands-Cpp
    star7th
        26
    star7th  
       2023-07-24 13:18:07 +08:00
    除了某些对性能要求很高的场合,一般用 Electron 即可 。也别信那些吐槽 Electron 的人,他们是从使用者出发的,希望使用的软件超高的性能。
    但对创作者而言,Electron 是最佳的技术路线,能平衡开发成本和效果。
    star7th
        27
    star7th  
       2023-07-24 13:18:46 +08:00
    tauri 也别用,生态还不够成熟 。如果对软件体积有极致的需求。
    shyangs
        28
    shyangs  
       2023-07-24 14:46:26 +08:00
    樓主都說了是 win 的桌面端,那就選 C# ( .NET ),

    C# 開發速度比 C++ 快,執行速度比 JS 快. windows 預設也安裝了 .NET Framework.
    horizon
        29
    horizon  
       2023-07-24 14:49:08 +08:00
    @owen800q #10
    老哥。。对自己不了解的慎重推荐。。
    iOCZ
        30
    iOCZ  
       2023-07-24 14:53:03 +08:00
    QQ 选 electron 无疑是一种倒退
    liruifengv
        31
    liruifengv  
       2023-07-24 15:18:10 +08:00
    tauri 。使用 webview2 ,只开发 windows ,并且不兼容老系统的话没问题的。
    Flybear
        32
    Flybear  
       2023-07-24 15:18:47 +08:00
    不跨平台原生就 WPF 或者 WinUI 3 。
    2023 年了,别再用 MFC 或者 WinForms 了,4K 屏看着眼睛都要瞎了。
    unco020511
        33
    unco020511  
       2023-07-24 17:47:24 +08:00
    Electron 大概率是首选
    henryhu
        34
    henryhu  
       2023-07-24 17:54:33 +08:00
    windows7 还有很多用户,electron 打包结果在 win7 上跑没问题吧?
    lxrmido
        35
    lxrmido  
       2023-07-24 17:56:44 +08:00
    electron ,相比起效率,对于现在的网络带宽和硬盘价格来说,多出来一个浏览器内核已经不是问题了。
    kimown
        36
    kimown  
       2023-07-24 21:23:04 +08:00
    electron, 天然的跨平台
    wjx0912
        37
    wjx0912  
       2023-07-24 21:42:58 +08:00
    一个 electron 多 100M 。装 50 个软件,也才 5t 。现在的硬盘也不会在乎这么点空间吧
    cs419
        38
    cs419  
       2023-07-24 22:22:37 +08:00
    说个国人开发的 编程语言 aardio
    https://aardio.com/
    https://bbs.aardio.com/

    可以开发 windows 桌面软件
    大佬更新频繁 还给这个语言写了 IDE

    近段时间停更了 说是老婆癌症
    要全身心的去照顾老婆
    扫码出两百块支持了一下
    不知道以后还会不会再更新
    H0H
        39
    H0H  
       2023-07-24 23:11:08 +08:00
    @cs419 38 ,AAuto 、aardio 抄袭自 Lazarus ,知乎上有讨论,当时的主题叫《 AAuto 为何更名为 aardio?》。

    当然,抄袭没多大问题,但是 aardio 是作者一个人维护,不开源,脾气又很差,各种问题都不回答。而且很奇怪的是,对于 JavaScript 调用 windows API 这种涉及到参数转换的,作者居然不知道怎么做。这本应该是他最熟悉的才对,因为 JavaScript 要调用 Windows API 肯定涉及到参数来回的转换啊,否则他这个工具咋写出来的?但看他在论坛中认真回复其他人在工作中遇到传参转换的,他没在开玩笑,完全是认真的说他也不清楚提问人给的场景下具体应该怎么做。把我都看懵了。说他水平差吧,能搞出这么强大的编程语言;说他很强吧,又是基础的问题都不清楚。

    这种情况下,如果是在家里给自己写几个小工具,用这个语言没问题。如果是在公司里开发商业软件,那风险就太大了,遇到问题只能靠自己想办法 debug ,网上基本上没讨论的。哪天作者弃坑了,那已经开发出了的各种小工具要完整支持下一代 windows 该怎么办?

    aardio 我自己在家里也用它开发了个小工具,但只是长时间做了 test ,没敢正式使用,主要是怕里面有恶意代码。而且它那个 IDE 也让我没了信心。作者宣传的是开发的小工具运行很迅速,但它的 IDE 我记得就要 5 秒钟才能打开,这说明运行也不迅速啊。这可能就证明了 aardio 只适合做玩具,真用来开发大一点的工具,性能恐怕是大问题。唯一的优点,就剩生成的 exe 很小。但商用环境下 exe 大小往往不是核心问题。既然这样,为什么不用 Electron ?
    jones2000
        40
    jones2000  
       2023-07-24 23:23:01 +08:00
    @wjx0912 带宽,硬盘不是问题, 关键是运行的时候如何抢占更多的资源( cpu,内存,磁盘读写等等), 这样才能让自己的程序丝滑, 把被人的程序卡死。
    xujinkai
        41
    xujinkai  
       2023-07-24 23:34:54 +08:00 via Android
    C#写服务肯定不错,但 XAML 那套搞的我头疼,最近在研究直接 WPF 窗口套 webview2 。
    虽然前端工程那一套也得学,但个人感觉比 WPF 简单些还漂亮。
    lisongeee
        42
    lisongeee  
       2023-07-25 00:09:42 +08:00   ❤️ 1
    上面说的一堆技术基本都不支持 Hot Module Replacement

    不支持 Hot Module Replacement 的开发框架 开发效率/体验 都很感人

    Hot Module Replacement 对旧时代框架在某种程度上基本是降维打击
    huohei
        43
    huohei  
       2023-07-25 00:36:22 +08:00 via iPhone
    flutter 做桌面端玩具还是很有趣的
    aprilandjan
        44
    aprilandjan  
       2023-07-25 00:54:10 +08:00 via iPhone   ❤️ 1
    @henryhu electron v19 及以下支持 win7 ,v20+开始就不支持了,主要是 chrome 104 之后放弃了对 win7 的支持。没什么特别诉求,用低版本一样的,问题不大
    toomlo
        45
    toomlo  
       2023-07-25 03:37:22 +08:00
    感觉 jetbrains 家的编辑器很好看,记忆里好像是基于 swing 还是 fx 独立写的一套 UI 框架来着,有懂的大佬可以说说~
    webcape233
        46
    webcape233  
       2023-07-25 07:02:02 +08:00 via iPhone
    我用 elctron 软件:什么辣鸡玩意

    我写 electron 软件:真香啊
    zjsxwc
        47
    zjsxwc  
       2023-07-25 07:08:48 +08:00 via Android
    Windows 上的 electron QQ 150MB ,卧槽真大。
    手机上的 QQ 268MB ,无所谓。
    wxf666
        48
    wxf666  
       2023-07-25 08:14:54 +08:00
    Sciter 咋样?最近才注意到。

    - 体积小至 5MB ,不依赖浏览器
    - 可使用 Html/CSS/JavaScript 开发
    - 跨 Windows 、Linux 、MacOS 三端
    - 有 GPU 渲染加速( WinXP 好像没有)

    个人可免费使用,付费版开源?
    loading
        49
    loading  
       2023-07-25 08:15:24 +08:00
    @H0H #39 aauto 作者今年发公告了,突发家属癌症要全力照顾。aardio 我用了挺多次,真的好用,可以说是 windows gui 自带电池的好东西,关键还是这也不收个费什么的,非常良心。

    真心感谢 aardio
    wuzhewuyou
        50
    wuzhewuyou  
       2023-07-25 08:36:54 +08:00
    万物基于 web ,话说多年没有开发桌面需求了
    Jammar
        51
    Jammar  
       2023-07-25 08:49:38 +08:00
    大部分新桌面客户端 electron 已经一统天下了,最不缺的就是前端,开发成本极低
    dj721xHiAvbL11n0
        52
    dj721xHiAvbL11n0  
       2023-07-25 08:50:35 +08:00
    应该的体积现在好像真的不是什么大问题了,现在硬盘的价格也下来了,就是内存占用的问题有点影响用户体验。
    kangyan
        53
    kangyan  
       2023-07-25 09:16:14 +08:00
    最近玩了一下 webview2 ,空包构建出来 80mb ,不知道如何去掉 runtime
    ajan
        54
    ajan  
       2023-07-25 09:25:48 +08:00 via Android
    @owen800q Pake 编译的 windows 端是利用了 webview2 组件,这货基本上就等于下载安装了一个 edge 浏览器,首次运行会检测 webview2 组件,没有安装就会下载 安装,禁止 webview2 组件联网 会导致编译的 exe 打开后出现网页打不开,且编译的 exe 并不小,且不包含 webview2 组件。
    flexbug
        55
    flexbug  
       2023-07-25 09:27:06 +08:00
    喜报,你已经安装 123 个 electron
    tanranran
        56
    tanranran  
       2023-07-25 09:32:33 +08:00
    主流厂商用啥,啥就成熟。做软件,除了爱心发电,其它都得考虑商业能力
    ruoxie
        57
    ruoxie  
       2023-07-25 09:34:55 +08:00   ❤️ 1
    @wjx0912 鬼才,5G=5T
    xbchaonba
        58
    xbchaonba  
       2023-07-25 09:35:05 +08:00
    @wjx0912 不是 5g 吗
    wxf666
        59
    wxf666  
       2023-07-25 09:36:53 +08:00   ❤️ 1
    @17681880207 #14
    @thinkm #18
    @star7th #26
    @lxrmido #35
    @wjx0912 #37
    @Jammar #51

    用 Electron 来写软件的,会不会意味着软件开发水平的下降?导致开发出来的软件体验很差?

    比如 [这个帖子]( /t/955422 ) 里提到的几个 Electron 应用:

    - 夸克网盘:**上传**一个 50 GB 的文件,要**写**硬盘几 TB (滥用 IndexedDB 导致)
    - 天翼云盘:下载文件时,每小时要**额外写** 40 GB 。下载 4 GB 文件,读写 170W 次文件。。

    会不会 Electron 屏蔽了底层细节,抽象得很好,开发人员对代码逻辑的成本高低没有感知,就瞎 JB 写了。。
    Vindroid
        60
    Vindroid  
       2023-07-25 09:57:34 +08:00
    用的 Qt(C++),感觉不会 c++也能玩转 Qt ,封装得很好,当 java 来写都没什么问题,还能跨平台,虽然成本不小
    PVXLL
        61
    PVXLL  
       2023-07-25 10:00:31 +08:00 via iPhone
    html
    lsk569937453
        62
    lsk569937453  
       2023-07-25 10:00:46 +08:00
    @Vindroid 不会 c++也能玩转 Qt ---->这句话是不是暗示 PyQt
    Jammar
        63
    Jammar  
       2023-07-25 10:56:14 +08:00
    @wxf666 electron 是由前端人员完成,前端懂个锤子操作系统的内部函数逻辑,大公司比如钉钉都有相应的优化,至于其他的,能跑就行,都不一定需要跨端
    sunrain
        64
    sunrain  
       2023-07-25 11:05:20 +08:00
    javafx + graalvm
    thinkm
        65
    thinkm  
       2023-07-25 11:23:39 +08:00
    @wxf666 看你写软件的目的,如果你的目的是提升自己能力就不要用 Electron ,如果你的目的是开发方便快捷,并提升用户体验就用 Electron
    BG7ZAG
        66
    BG7ZAG  
       2023-07-25 11:42:33 +08:00
    electron 或者 flutter
    StateMa
        67
    StateMa  
       2023-07-25 14:00:08 +08:00
    electron
    QT
    winfrom
    1 最简单入门最快
    23 都是老熟人了
    至于 electron 的大小问题我记得可以替换内核来减小包大小,winfrom 里能替换 web 内核我用过。electron 之前见过。
    D6IIx
        68
    D6IIx  
       2023-07-25 14:17:19 +08:00
    @putaozhenhaochi 如何打包成 exe 部署呢?版本迭代的数据如何保留?
    putaozhenhaochi
        69
    putaozhenhaochi  
       2023-07-25 14:22:53 +08:00 via iPhone
    @D6llx electron 有打包工具的 数据你搞个 sqlite ?
    zgl263885
        70
    zgl263885  
       2023-07-25 16:14:07 +08:00 via iPhone
    @lsk569937453 wpf 表示不服
    star7th
        71
    star7th  
       2023-07-26 11:59:32 +08:00
    @wxf666

    这个不是 Electron 的问题。是那个程序员自己的问题。如果 Electron 这么简单都搞出这么明显的 bug ,开发啥都有 bug 。
    ljsh093
        72
    ljsh093  
       2023-07-26 12:46:46 +08:00
    @wxf666 #48 扭曲的 JS 语法感觉是个坑,不敢用
    wxf666
        73
    wxf666  
       2023-07-27 23:00:20 +08:00
    @ljsh093 #72 它的 js 不是用的 quickjs 吗?标准 ES2020 ?
    wxf666
        74
    wxf666  
       2023-07-27 23:38:11 +08:00
    @Jammar #63 基本的计算机知识得要有吧。。哪有一个 4GB 文件,分成 18W 份临时文件的。。

    @thinkm #65 提升用户体验,是说好看吗?

    @star7th #71 不一定。天翼云盘那个可能是程序员的问题,就算不用 Electron ,换其他工具也一样。

    但夸克网盘那个,可能真的是 Electron 封装得太好,导致开发者以为,预先分片任务到 IndexedDB 没啥代价了。。(结果搞了 几 TB 写入出来。。)

    我的意思是,就是因为简单,所以什么人都能胜任,但深入的细节可能由于自身没有知识储备,处理不好,所以质量可能比 QT 等软件的差。。

    会 QT 之类的,应该就暗含对计算机比较熟悉的前提条件了吧?那开发出来的软件质量高,也是大概率的事情?
    star7th
        75
    star7th  
       2023-07-28 09:01:58 +08:00
    @wxf666

    用汇编的人,对计算机底层更熟悉,但也不见得用汇编来写更好。事情不能单纯从 越接近底层就技术练的越好的角度来看。

    不排除某些需要性能的场景,要用原生开发死磕性能。但是大部分场景下,没那么多在乎性能,尤其是现在消费级 pc 市场的电脑性能已经很棒了。再在乎这么点性能,就没必要了。开发成本,管理成本,更重要。用几分之一的成本,做一个尚可的应用 ,这个诱惑力太大了,潮流趋势根本不可阻挡,Electron 类似技术肯定会占领桌面开发的半壁江山。
    ljsh093
        76
    ljsh093  
       2023-07-28 10:25:17 +08:00
    @wxf666 #73 搜了下才知道我大清亡了,以前确实不是标准 JS ,那现在看来个人工具类带 ui 的程序可以用用吧
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1011 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 20:47 · PVG 04:47 · LAX 12:47 · JFK 15:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.