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

桌面端技术选型求指导

  •  
  •   windpinw · 2021-11-25 15:59:10 +08:00 · 8806 次点击
    这是一个创建于 1125 天前的主题,其中的信息可能已经有所发展或是发生改变。

    先说背景,公司要做的,小工具辅助客户的级别,商业软件,非大型项目。

    1. 核心逻辑部分已经有十分完备的 java 实现(可以从公司主项目抄过来)
    2. 希望尽量轻量化。
    3. 目前在考虑桌面端的框架。 JavaFx: 不考虑,社区不好,支持少 Swing: 最容易和逻辑部分结合,比较担心 UI 方面能否实现较好的效果,或者 effort 是不是比较大 Electron: UI 不担心,但是逻辑处理的部分需要用 js 重构一次,后续的迭代大概率还要继续参考主项目的代码 进行重构。除非独立部署一个 java web 服务器让逻辑部分单独出来。 Native 类的 C++/C#:主项目就是用这些写的,开发负担比较重,估计不考虑。除非有很好的解决方案。

    广泛吸纳意见,希望看看我上面的想法有哪些是过虑的,或者各位有什么建议都可以说说。 如有表达不到位的地方还请指出

    第 1 条附言  ·  2021-11-26 11:36:25 +08:00
    -----------------------------
    感谢大家的意见,目前看到的意见大概有:

    1. Kotlin Compose
    2. Electron 单独起 java 服务
    3. JavaFx 内嵌 webview
    4. Native

    另外再补充一点,小工具以读,展示内容为主,写,输入的操作不多。

    关于这些方案我周末再研究一下,下周跟老大开会确定,有定论我会更新一下。
    第 2 条附言  ·  2021-11-29 18:09:27 +08:00
    今天开会很老大们讨论了一下,有了初步的方向

    再补充一下前提:这个工具的核心就是读一个专有格式的文件,这个文件有可能会很大( GB 级别)

    1. 非 Java 栈的比如 Native 类,Electron ,另起 java 服务的老大直接否了,对于一个工具类软件来说没必要。所以只剩下重写逻辑

    2. 这样需要把原来 java 实现的读取二进制文件的逻辑用 js 重写,因为这个专有文件设计之初就是按照 java 序列化二进制定制的。所以这块重写会比较耗时间。

    3. 另外也比较担忧 electron 对于这种文件读取分析的性能优化问题。

    4. 因为这个项目只由我一个人做,本人对 nodejs 这块掌握一般,所以老大们更倾向于 java 栈方向

    ————————————————

    Java 栈方向按照大家的意见无非就是

    1. JavaFx
    2. Compose for Desktop

    这两块也是我们开会最后还没决定的地方

    1. JavaFx 已经算非常成熟的框架(时间上来说)而 Compose 目前还只是 1.0.0 非常新的东西,而且还没有哪个基于这个框架做的比较好的开源项目(如果有,请补充,我正好可以给老大们展示
    2. 老大们的意见是,新的工具可以尝试一下新的东西,毕竟不影响到主产品线。但是也得考虑开发的周期和稳定性。所以问我,Compose 对于 JavaFx 在 UI 的开发上有什么突出的优势,好看到什么程度?迭代速度是否更快?

    还希望熟悉 compose 的 v 友给点意见
    69 条回复    2021-11-30 09:30:17 +08:00
    kujio
        1
    kujio  
       2021-11-25 16:05:35 +08:00
    如果会 android 的话,可以考虑试试 kotlin compose
    xuxuxu123
        2
    xuxuxu123  
       2021-11-25 16:06:17 +08:00
    我的想法就是 Electron ,然后 java 器 web 服务
    ryougifujino
        3
    ryougifujino  
       2021-11-25 16:10:45 +08:00
    https://github.com/JetBrains/compose-jb

    这个如何,使用 Kotlin ,和 Java 的互操作性不用担心。
    luchong
        4
    luchong  
       2021-11-25 16:23:51 +08:00
    WPF
    kujio
        5
    kujio  
       2021-11-25 16:24:14 +08:00
    kotlin compose Ui 组件可以参考这个:https://github.com/Gurupreet/ComposeCookBook
    UI 组件很全,自定义也很灵活,
    Otho
        6
    Otho  
       2021-11-25 16:39:11 +08:00   ❤️ 2
    Electron + gRpc + Java
    bjzhou1990
        7
    bjzhou1990  
       2021-11-25 16:43:24 +08:00   ❤️ 1
    可以考虑 Flutter ,Desktop 版本也算比较成熟了
    maichael
        8
    maichael  
       2021-11-25 16:45:49 +08:00
    没有跨系统的需求的话不要使用 Electron 和 Flutter 等
    yazinnnn
        9
    yazinnnn  
       2021-11-25 16:50:32 +08:00
    compose
    bsg1992
        10
    bsg1992  
       2021-11-25 17:50:08 +08:00
    duan602728596
        11
    duan602728596  
       2021-11-25 17:52:21 +08:00
    我的想法和 2L 一样,推荐使用 Electron 。然后建议使用 react 或者 vue 全家桶开发单页应用。
    用 Electron 的优点就是跨平台,系统的能力有 Node 和 chromium 来解决,编译可以跨平台且直接分发。
    这是我个人写的基于 Electron 的项目( https://github.com/duan602728596/48tools ),里面有一堆功能,直接编译到 5 个平台,你可以参考一下。
    MasterMonkey
        12
    MasterMonkey  
       2021-11-25 18:20:27 +08:00 via iPhone
    @Otho 我支持这个
    happinessnch
        13
    happinessnch  
       2021-11-25 18:23:27 +08:00   ❤️ 1
    重表现,用 Electron
    重交互、多系统调用,用 Native ( QT ,WPF ,WinForm 等)
    makelove
        14
    makelove  
       2021-11-25 18:25:40 +08:00
    除非有特别的硬性需求否则无脑上 Electron,最近几年被证明的最佳 UI 方式, java 就单独起个进程就行最好别搞二套逻辑
    darknoll
        15
    darknoll  
       2021-11-25 18:43:41 +08:00
    这年头好看>效率,当然用 Electron
    juzisang
        16
    juzisang  
       2021-11-25 19:12:07 +08:00   ❤️ 1
    可以试试 https://github.com/tauri-apps/tauri
    体积小,也是 webview 套壳,个人感觉实现比 Electron 规范和优雅很多
    ysc3839
        17
    ysc3839  
       2021-11-25 19:25:52 +08:00
    JavaFX WebView 或者 JCEF ? https://bitbucket.org/chromiumembedded/java-cef
    这两个方案类似 Electron 跨平台,可以用 Web 做界面,但是后端不跟 js 强绑定,可以直接用 Java 代码做后端。(前端当然还得写 js)
    IsaacYoung
        18
    IsaacYoung  
       2021-11-25 19:35:52 +08:00 via iPhone
    electron 吧
    xiaoyanbot
        19
    xiaoyanbot  
       2021-11-25 19:41:04 +08:00
    nw.js
    pengtdyd
        20
    pengtdyd  
       2021-11-25 19:46:07 +08:00
    @bjzhou1990 目前 Flutter Desktop 不推荐使用
    zjsxwc
        21
    zjsxwc  
       2021-11-25 20:01:07 +08:00 via Android
    这种 electron 与 java 全都要?
    https://github.com/jreznot/electron-java-app
    Buges
        22
    Buges  
       2021-11-25 20:10:17 +08:00 via Android
    已经用 Java 写好了,那肯定继续用 Java 。
    啥情况都无脑推 electron 的,是内存太多没地方用吗?
    nojsja
        23
    nojsja  
       2021-11-25 20:36:08 +08:00
    之前一直写 electron ,现在正在学习和尝试 tauri+rust
    amai0w0
        24
    amai0w0  
       2021-11-25 21:45:09 +08:00 via Android
    @bjzhou1990 现在用 Flutter 开发 Windows 桌面程序的都是真勇士,Desktop 应该还没发正式版吧
    jlkm2010
        25
    jlkm2010  
       2021-11-25 21:47:54 +08:00
    JavaFX WebView
    MakHoCheung
        26
    MakHoCheung  
       2021-11-25 22:13:35 +08:00
    小工具的话用 jfx 没啥问题吧,直接上 java17 ,可以 jlink 成一个自包含的应用,如果类库不怎么多反射的话还可以用 gluon substrate 编译成原生二进制程序。当然楼主一开始就否了 jfx ,我这回复多余的
    nicevar
        27
    nicevar  
       2021-11-25 23:05:36 +08:00
    给什么人用?如果只是少量用户很单一,什么选型都不重要,但是用户复杂的话,不要用 Electron 这种,开发出来了可能会被拒绝使用,体积大效率低,很多开发者喜欢用 Electron 开发,但是做出来的软件自己都不用。
    Flutter 就更不要用了,这种不成熟的东西用起来就是坑,现在连 Android 上开发出来的软件问题都很多,编辑框的问题到现在还没解决
    ashong
        28
    ashong  
       2021-11-26 00:10:27 +08:00 via iPhone
    chromium + js + c++
    akira
        29
    akira  
       2021-11-26 05:07:39 +08:00   ❤️ 1
    Native 类的 C++/C#:主项目就是用这些写的

    主项目用这个写,说明你们主要的技术栈就是这个了,那还换啥语言啊
    mirage13
        30
    mirage13  
       2021-11-26 08:34:26 +08:00
    用 qt 啊
    kun775
        31
    kun775  
       2021-11-26 09:03:07 +08:00   ❤️ 1
    windows 桌面应用无脑 winform 或 wpf 就 OK 了
    skinny
        32
    skinny  
       2021-11-26 09:03:39 +08:00
    别信什么 Electron 体积大效率低什么的说法,一般应用根本到不了那个瓶颈,除非你的 UI 代码和知乎微博那些桌面网页代码一样实在烂得没边
    ming159
        33
    ming159  
       2021-11-26 09:11:31 +08:00   ❤️ 1
    C#吧,Winform ,拖拽个界面。使用 HTTP 协议与 Java 通信交换数据,例如 Flurl ;
    然后 Java 端内置一个 Jetty 作为 web 服务;

    缺点: 仅适用于 Windows ,无法跨平台;界面稍微不注意会很丑
    优点: 快,Java 端逻辑可以完全复用。
    youxiachai
        34
    youxiachai  
       2021-11-26 10:59:52 +08:00
    @amai0w0 flutter 2.5 desktop 已经发正式了....
    youxiachai
        35
    youxiachai  
       2021-11-26 11:02:25 +08:00
    @nicevar 不是写着商业项目吗.... Electron 感觉完美...美团饿了么商家端程序都是这个..
    sgissb1
        36
    sgissb1  
       2021-11-26 11:11:24 +08:00
    Electron 就可以了,界面这一块不该投入太多去搞。h5 做界面多快啊。
    newmlp
        37
    newmlp  
       2021-11-26 11:34:49 +08:00
    Electron 看看客户接不接受,不接受就 Qt ,基本靠谱的桌面开发就这两个了
    newmlp
        38
    newmlp  
       2021-11-26 11:36:50 +08:00
    @skinny 千万别用自己的环境去想象客户的环境,有些人还用是古董机器,electron 可能都启动不了。。。
    darknoll
        39
    darknoll  
       2021-11-26 11:41:01 +08:00
    @newmlp 还有一个 cef 也是靠谱的,就是资料太少
    caryyu
        40
    caryyu  
       2021-11-26 11:41:54 +08:00
    如果主项目已经有了前端展示,直接上 Electron ,移植到桌面。
    youxiachai
        41
    youxiachai  
       2021-11-26 11:49:27 +08:00
    @newmlp 我用 win 10 的 atom 都跑过 electron.... 在怎么古董也不至于此吧...能给几十万甚至上百万的项目的,不至于吧
    hez2010
        42
    hez2010  
       2021-11-26 11:58:16 +08:00 via Android
    可以用 Avalonia 开发跨平台 GUI: https://github.com/AvaloniaUI/Avalonia
    newmlp
        43
    newmlp  
       2021-11-26 11:59:51 +08:00
    @youxiachai 什么奇葩环境和用户都有,没遇到是你运气好
    heytap
        44
    heytap  
       2021-11-26 12:18:10 +08:00
    尽管很多人吐槽 但我还是得推下 electron
    WenhaoWu
        45
    WenhaoWu  
       2021-11-26 12:34:32 +08:00 via Android
    自己开发 electron ,但是很抗拒 electron 的 app +1 。BTW, Flutter 的桌面端至少在 Mac 上比 Electron 流畅
    auroraccc
        46
    auroraccc  
       2021-11-26 12:58:59 +08:00
    商业软件不推荐 flutter 或者 tauri 。。
    icyalala
        47
    icyalala  
       2021-11-26 13:24:53 +08:00
    论社区当然是 Electron ,和其他方案不是一个级别的,但前提是重构 /重写。
    如果不想重写,想复用 Java 栈,那还是考虑下 JavaFX 吧。
    icyalala
        48
    icyalala  
       2021-11-26 13:27:14 +08:00
    至于上面说的 Flutter ,如果愿意承担 Dart 重写的成本,那还不如用回 Electron 呢。
    Accessing
        49
    Accessing  
       2021-11-26 13:27:45 +08:00   ❤️ 1
    JavaFx 没你想的那么糟糕,实际上这个工具很不错。你如果觉得不行,那你就给出哪个地方具体不行的理由,而不是笼统的说生态不好之类的。当你这么做之后,你可能会发现完全可以满足自己的需要。
    s127
        50
    s127  
       2021-11-26 13:47:57 +08:00
    如果没有复杂的界面布局,没有高性能显示要求(大量绘图、3D 图等),仅仅是一个小工具,建议上 javaFX 。既然公司核心是 java ,自然不缺 java 开发人员。javaFX 入门用不了几天,官方文档也还不错。后期如果有其他非 win 系统部署,迁移更容易。
    silencelixing
        51
    silencelixing  
       2021-11-26 14:10:20 +08:00
    Electron 和 QT ,对样式要求高就用 electron ,对流畅图要求高就用 qt ,当然如果两者都要求高的话,那可以考虑考虑 flutter (🤪)
    ainimuyan
        52
    ainimuyan  
       2021-11-26 14:19:22 +08:00
    如果是对项目负责,当然延续 Java 使用 JavaFX ,除非你对其他桌面技术非常非常熟悉,重写或翻译逻辑非常快。
    如果你出于个人原因想搞点别的技术,建议整个小项目自己玩。
    longear
        53
    longear  
       2021-11-26 14:20:36 +08:00
    nw.js 到底行不行, 用过的人来说一说
    iikebug
        54
    iikebug  
       2021-11-26 14:55:06 +08:00
    @longear nw.js 比 electron 唯一的优势是源码加密
    SilenceLL
        55
    SilenceLL  
       2021-11-26 15:33:57 +08:00
    3dwelcome
        56
    3dwelcome  
       2021-11-26 15:45:41 +08:00
    electron+1 ,毕竟前端 npm 轮子多多。

    你用 Native 只能写点简单的页面,复杂的组件还要自己造轮子,多累。
    abcbuzhiming
        57
    abcbuzhiming  
       2021-11-26 16:03:43 +08:00
    @skinny Electron 就是体积大效率低,怎么,烂还不准人说是把? Electron 这东西唯一的好就是对"开发者友好",尤其是对前端出身的开发者友好,做出来的东西,性能和原生差几条街,用户的机器不当钱,吃 CPU 内存没有上限。想吹 Electron ,麻烦等用原生程序成长起来的那一代使用者死光了再说

    想用 Electron ,我不反对,反正这东西,程序员用起来是很爽,骂娘的都是用户
    skinny
        58
    skinny  
       2021-11-26 16:10:00 +08:00
    @abcbuzhiming 行,这就扣上吹 Electron 帽子了,你爱用 native 就用 native ,SB
    3dwelcome
        59
    3dwelcome  
       2021-11-26 16:30:32 +08:00
    @abcbuzhiming

    “做出来的东西,性能和原生差几条街,用户的机器不当钱,吃 CPU 内存没有上限。”

    那要看具体是做什么了,以前有不少 V2 开发者提问,为什么十几万的树节点,在 vue 里拖动那么卡。

    我只能说,网页端确实不适合处理这种超大数据的应用。

    可是普通的小工具小应用,用 JS 写写,还是异常方便的。
    iikebug
        60
    iikebug  
       2021-11-26 16:48:37 +08:00
    @abcbuzhiming Electron + 原生插件绑定,效果不会差的,纯 js 的性能确实不太行
    wdwwtzy
        61
    wdwwtzy  
       2021-11-26 16:57:31 +08:00   ❤️ 1
    我觉得桌面开发首选 C#,其他的你都会踩到各种各样的坑
    superchijinpeng
        62
    superchijinpeng  
       2021-11-26 17:03:12 +08:00
    Kotlin Compose
    creanme
        63
    creanme  
       2021-11-26 17:33:28 +08:00   ❤️ 1
    WPF ?不太喜欢 Electron
    dk7952638
        64
    dk7952638  
       2021-11-26 17:39:31 +08:00
    @auroraccc 为什么?是因为授权许可吗?
    yolee599
        65
    yolee599  
       2021-11-26 22:01:36 +08:00 via Android
    Electron 不好用,体积大还吃配置,推荐的应该都是写 web 的程序员
    wxw752
        66
    wxw752  
       2021-11-27 01:04:51 +08:00
    Electron 和 WPF 都敲过,投 Electron 一票
    whi147
        67
    whi147  
       2021-11-28 10:37:48 +08:00 via iPhone
    @darknoll 我 github 有一套开源的 cef 做底子,h5 做界面的 demo
    windpinw
        68
    windpinw  
    OP
       2021-11-29 18:21:42 +08:00 via iPhone
    最新更新,希望有了解 compose 的说说看法😂
    Edward4074
        69
    Edward4074  
       2021-11-30 09:30:17 +08:00
    @windpinw 最近刚开始用 compose desktop 搞个小工具,感觉还是比较友好的。官方 git 中有些 demo 可以参考,kotlin 、java 无缝衔接,展示内容为主的话应该没什么好犹豫的了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5361 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 07:43 · PVG 15:43 · LAX 23:43 · JFK 02:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.