V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jahan
V2EX  ›  Node.js

求教写跨平台的桌面 gui 程序, electron 是不是个好的选择?

  •  
  •   jahan · 2017-12-12 20:31:32 +08:00 · 19857 次点击
    这是一个创建于 2298 天前的主题,其中的信息可能已经有所发展或是发生改变。
    目前看下来,个人觉得好处好像是,可以直接用网页的 js 代码,很多逻辑可以直接抄袭;
    坏处好像这个节点很多人对 electron 嗤之以鼻,可是又没有人总结,也没有人给出更好的解决方案。
    是不是 1,安装包太大了? 2,慢?
    大家能不能指一条路呢。
    61 条回复    2018-04-29 01:43:50 +08:00
    Rice
        1
    Rice  
       2017-12-12 22:08:11 +08:00 via Android
    然而他们很多人都在用 atom 和 vscode。
    你有网页的基础,要开发快就用。你应该也知道有什么坑了。ps:面向客户的话先问清楚,我们这边曾经用 electron 开发了客户端,开发完了客户才说 electron 是网站,太 low,不安全云云,于是还用 pyqt 重做。
    Lpl
        2
    Lpl  
       2017-12-12 22:11:28 +08:00 via iPhone
    以前做过简单的开发...嗤之以鼻有一部分原因是中文文档和分享太少。记得云音乐以前好像用的这个
    shiny
        3
    shiny  
       2017-12-12 22:13:26 +08:00
    个人项目的话,哪个开发效率高用哪个。
    dcalsky
        4
    dcalsky  
       2017-12-12 22:13:39 +08:00   ❤️ 2
    electron 框架在跨平台开发方面已经算比较成熟了,只要你不搞太底层的开发那么坑不大(上次做文件系统被坑惨了)。而且结合社区积累的知识点、解答的问题,应该能度过很多坑了。看你是不是能熟练使用搜索工具了。

    1、安装包大。确实是一个问题,但是在 mac 下,其实各个软件体积都还挺大的。或者可以试试这个打包: https://github.com/electron-userland/electron-forge ;但是你的软件有特别要注重体积的应用场景吗?

    还有 js 文件暴露的问题。意味着如果你要做一些安全方面的开发,请尽量在后端搞。

    2、慢。看你说是哪一方面的了。编程语言? UI 渲染?还是网络请求?如果你不做高密度计算工程,如果慢,那就不是框架的问题。

    补充一点:vscode 基于 electron 开发的案例,不能作为普通开发者的参考。
    duan602728596
        5
    duan602728596  
       2017-12-12 22:14:22 +08:00 via iPhone
    用的 nwjs,react 全家桶配合 node 美滋滋
    alang
        6
    alang  
       2017-12-12 22:20:30 +08:00
    近期的 GUI 全部用 electron + vue 来开发了。迅速。

    至于上面又说中文资料少的,我最鄙视这种人了。资料已经不少了,踩过的坑基本都能找到文档,英文的也看的懂。还拿中文文档说事情的人,你这辈子也就这点出息了。

    说 low 的那些客户,我是没遇到过,反而称赞界面更漂亮了,更现代化了。

    能够迅速的完成开发,快速迭代,客户能很快的拿到工具开始用,这个已经非常值得了。

    赶紧做,别想那么多。
    ivechan
        7
    ivechan  
       2017-12-12 22:26:35 +08:00   ❤️ 1
    electron is flash for the desktop.
    ivechan
        8
    ivechan  
       2017-12-12 22:30:00 +08:00   ❤️ 3
    可怕的是 electron 是个初期的 flash(可能刚刚开始), 而不是现在被淘汰的 flash.
    当然了, 我觉得用 electron 是现在最好的选择(就像 flash 当时也是最好的选择一样)

    当你电脑上有一个 electron 应用的时候你会称赞它, 并且被它的外表所吸引, 可能会嫌弃其他应用.
    当你电脑上所有应用都使用 electron 的时候, 一切变得就不那么美好了.
    someonetwo
        9
    someonetwo  
       2017-12-12 22:38:44 +08:00
    主要看应用类型了,如果是偏向底层的应用软件肯定不合适,如果偏网络应用的,而且大部分在 web 上就能操作的,那这个是最合适了。
    nicevar
        10
    nicevar  
       2017-12-12 22:44:06 +08:00
    electron 适不适合是看你的需求的,如果应用与操作系统结合比较多,对性能要求很高就不太适合,如果只是做一些业务逻辑的东西问题不大,所以先调研一下,别最后做到后面发现有问题解决不了推倒重来就麻烦了,技术调研很重要的,近几年遇到好几家公司就是死在移动客户端上,一开始用 html5 开发 app,到后期快上线了发现有解决不了的问题
    learnshare
        11
    learnshare  
       2017-12-12 22:47:08 +08:00
    Electrom 或者 QML 吧
    jahan
        12
    jahan  
    OP
       2017-12-12 23:07:46 +08:00
    感谢大家热情回复。
    @nicevar 性能要求不高,个人用的管理软件而已,需要一部分网络通讯。

    @someonetwo 基本上很大一部分操作抄袭网页的逻辑甚至界面。
    @ivechan 现在想着能快速做一个东西出来,至少用起来,但是确实觉得 ele 很炫。

    @alang 感谢提醒 ele+vue

    @duan602728596 这个具体怎么配置? nwjs 不是已经背 ele 取代了吗
    @dcalsky 目前自己用,大小倒不是问题。高密度的计算打算用 julia 解决。
    再次感谢大家热情回复。
    JosephusZhou
        13
    JosephusZhou  
       2017-12-12 23:08:51 +08:00 via iPhone
    @Lpl 不会谷歌,英文社区一堆,github issues
    jahan
        14
    jahan  
    OP
       2017-12-12 23:12:54 +08:00
    另外请教一下大家有没有财务管理类的 electron 开源代码可以学习的? git 上有个俄国人写的,觉得不是特别清晰。
    duan602728596
        15
    duan602728596  
       2017-12-12 23:27:48 +08:00 via iPhone
    @jahan 取代到不至于,只不过各有优缺点罢了。配置就是 webpack+react 全家桶的单页配置,路由就是 HashRouter 的形式,去掉 webpack 的热更新,其他的和前端开发差不多。
    jahan
        16
    jahan  
    OP
       2017-12-12 23:31:00 +08:00
    @duan602728596 看起来这个配置就较为复杂。如果有清晰的文档还好。不知道 helloworld 环境要搞多久?
    lengyihan
        17
    lengyihan  
       2017-12-13 00:32:38 +08:00 via Android
    不好,qt 吧
    param
        18
    param  
       2017-12-13 00:37:36 +08:00 via Android
    现在没人谈 Qt 了吗?
    coolcfan
        19
    coolcfan  
       2017-12-13 01:24:11 +08:00 via Android   ❤️ 1
    对于开发者当然是好选择……
    作为用户,我很不喜欢用 electron 做的桌面程序……
    inflationaaron
        20
    inflationaaron  
       2017-12-13 01:29:04 +08:00 via iPhone
    electron 最大的问题还是资源占用,每多开一个 electron app 就相当于多开了一个浏览器。话说现在有没有 C/S 结构的 electron 呢
    alexlee0728
        21
    alexlee0728  
       2017-12-13 01:32:12 +08:00 via Android
    Cocos studio
    jahan
        22
    jahan  
    OP
       2017-12-13 01:41:08 +08:00
    @param
    @lengyihan
    qt 挺好用的,就是 license 有点贵了。
    shihira
        23
    shihira  
       2017-12-13 03:17:32 +08:00 via Android
    当然应该用 qml 啊
    janxin
        24
    janxin  
       2017-12-13 08:24:14 +08:00 via Android
    qt 有免费实现啊
    jahan
        25
    jahan  
    OP
       2017-12-13 08:36:00 +08:00
    @inflationaaron 如果有一天满屏都是 electron 桌面,对系统也是考验,项目到后期效率和资源就成了关键了。qt 和 electron 都尝试下看看,谢谢大家。
    jasperjia
        26
    jasperjia  
       2017-12-13 08:51:25 +08:00
    曾经技术选型考虑过 Electron,不支持 XP,只能换用 NW.js
    missdeer
        27
    missdeer  
       2017-12-13 08:55:02 +08:00
    业务需求决定技术选型
    wu67
        28
    wu67  
       2017-12-13 09:24:16 +08:00
    曾经我想用一个开源项目,但作者只放出了源码。
    所以我只能 git clone。
    只是当我 npm i 的时候,electron 一直 i 不了,三四次之后我就放弃了,直接转找其他 qt 打包好的。。。
    jishu541464750
        29
    jishu541464750  
       2017-12-13 09:29:32 +08:00
    借楼请问一下,electron 可以开发类似$$或者网游加速器之类的应用么。
    看了下文档,只看到了针对渲染进程的 session 有使用代理的方式( session.setProxy ),没看到能监听系统网络的 API。
    evolify
        30
    evolify  
       2017-12-13 09:29:53 +08:00
    go-sciter
    leemove
        31
    leemove  
       2017-12-13 09:31:00 +08:00
    @ivechan 为什么这条回复有种翻译腔在里面的感觉 哈哈哈哈
    chairuosen
        32
    chairuosen  
       2017-12-13 09:32:24 +08:00   ❤️ 1
    告诉你我们遇到一些坑。
    node 原生库的多平台 rebuild 麻烦,系统内置的库在某些系统上有可能缺失。
    node 进程和浏览器进程通信的 ipc 会阻塞浏览器渲染进程,通信多了就感觉卡。
    窗口不 focus 时接收不到点击事件,所以 blur 时无法直接点击自己实现的窗口控制栏按钮关闭。
    毕竟是个浏览器,本地交互有权限问题,比如粘贴不能识别为文件只是图片。
    mac 下和输入法有兼容性问题,经常 crash,1.7.5 才修复。
    调用 windows 通知系统有积压消息问题。
    mac 下开关 dock 栏自动隐藏会导致禁止窗口缩放的控制失效。
    Cooky
        33
    Cooky  
       2017-12-13 09:33:29 +08:00 via Android
    @param 坐等 PySide2
    jahan
        34
    jahan  
    OP
       2017-12-13 09:42:56 +08:00
    @chairuosen 感谢分享这么多经验。解决这些应该付出很多时间。
    deadEgg
        35
    deadEgg  
       2017-12-13 09:58:27 +08:00
    看好 electron,不看好 Qt。个人使用下来 Qt 有点老旧(望指正)。
    nicevar
        36
    nicevar  
       2017-12-13 11:30:01 +08:00   ❤️ 1
    @deadEgg 其实关系不大,两者针对的需求不太一样,electron 比较适合偏业务逻辑的应用,对性能稍微有要求的用 electron 开发出来根本没法用,体验很差,除非是垄断行业,否则别人用 Qt 开发出类似的应用,用户全跑了,而 Qt 适合开发各种跨平台的应用,缺点就是开发效率低一点,不过在 symbian 时代后期就已经推出 qml,配合 js 开发效率高了不少,现在很多人都不知道自己电脑里很多应用都是 Qt 开发的,比如游戏平台暴雪的战网和 11 平台、Autodesk 系列、android 官方模拟器及 genymotion、amd 的驱动管理、反编译的 ida pro、播放器 vlc、虚拟机 virtualbox、google 的桌面软件系列、skype 和 yy 语言等等太多了
    jahan
        37
    jahan  
    OP
       2017-12-13 12:26:26 +08:00
    @nicevar 能不能介绍下学习路径? 目前只是对 python 算熟悉
    tamlok
        38
    tamlok  
       2017-12-13 13:02:32 +08:00
    @jahan 可以试试 QML 或者 pyqt。另外,Qt 的 QWebEngine 能够调用 Javascript,混合开发还是很方便的。不过,C++来开发,进度的确是慢别人一步。
    nicevar
        39
    nicevar  
       2017-12-13 14:57:53 +08:00
    @jahan 如果你的应用是偏逻辑的,用 electron 没啥问题,就是安装包比较大,如果写个小工具用它的话就不方便了,一丁点功能就上百兆的体积,如果你用 Qt 的话,要学习 C++,成本有点高,不用 Qt widget 用 qml 还好点,但是 qml 开发的时候遇到一些需要定制的东西还得用 c++封装,尽管这种情况不一定需要,不过你熟悉 Python 所以 PyQt 比较适合你现在的情况,搭建好环境了解一下 Qt 的 Gui 库和信号槽机制,然后对着官方文档就可以开工了,当然坑是少不了的
    zjsxwc
        40
    zjsxwc  
       2017-12-13 14:59:20 +08:00
    atom 卡的要死, 居然还有人用
    jahan
        41
    jahan  
    OP
       2017-12-13 17:33:44 +08:00
    @nicevar 非常感谢您的建议。都是写的自己使用的小程序。
    edsheeran
        42
    edsheeran  
       2017-12-13 18:24:50 +08:00 via iPhone
    qt
    jahan
        43
    jahan  
    OP
       2017-12-13 18:38:49 +08:00
    @nicevar 哪里可以看到 qt 或者 qml 的概况、文档,学习路线图?如果有整理过的那就太好了。
    droiz
        44
    droiz  
       2017-12-13 19:13:12 +08:00 via iPhone
    对开发人员来说可能是个好选择,但作为用户我最烦这种软件,除非 vscode,否则一律不用
    loading
        45
    loading  
       2017-12-13 19:17:56 +08:00 via Android
    界面写起来太慢了吧。
    srlp
        46
    srlp  
       2017-12-13 19:19:07 +08:00 via iPhone
    是好选择。实际上需要一套代码跨平台,除了 electron 和 qt 之外也没有什么好选择了。

    重点是不要做成浏览器+网页版那种。

    楼上各位都说 vscode 好用,那是因为别人“伪装”成桌面应用很用心,而且优化得基本不卡了。

    除了效率之外的另一个问题就是确实文件体积很大。

    如果不追求跨平台共用代码的话,分别 native 实现当然是最好的,比如 win 上用 c# 撸一个。
    srlp
        47
    srlp  
       2017-12-13 19:28:50 +08:00 via iPhone
    呃,除了 electron 和 qt,你还可以上个 java #滑稽
    REB
        48
    REB  
       2017-12-13 19:32:16 +08:00 via Android
    还有 Java FX( ̄ー ̄)ニヤリ
    TangMonk
        49
    TangMonk  
       2017-12-13 19:34:20 +08:00 via Android
    golang 可以试试
    SuperMild
        50
    SuperMild  
       2017-12-13 19:36:01 +08:00 via iPhone
    其实自用的小软件,做成服务器加网页的形式就很好,没必要追求 GUI,比如 electron,如果不花很多时间精力去做界面伪装原生软件,也就和打开个网页一模一样,与服务器加网页相比优势不明显,
    jahan
        51
    jahan  
    OP
       2017-12-13 19:38:19 +08:00
    @REB 你这里にやり一下,我 特别怕入坑 java
    @SuperMild 想着如果越来越大,数据源越来越多,可能也是一个很好的选择。
    northisland
        52
    northisland  
       2017-12-13 19:42:31 +08:00 via iPhone
    Unity
    secondwtq
        53
    secondwtq  
       2017-12-14 01:27:53 +08:00   ❤️ 1
    和 Electron 在看起来“主流”的 Web 开发之类圈子火热相对的是,Qt 这东西在 VFX 圈已经无双了 ... Maya,Modo,Nuke,Houdini,Mari,Substance 系列,叫的上名字的,叫不上名字的,打开没个 Qt 都不好意思见人,好像 Max 也换了 Qt 了
    这个占有率恐怕能跟 Electron + 浏览器相比,我个人觉得是比 Electron 牛多了
    同时这一行现在坠好的语言是 Python,PyQt 和 PySide 当然也跟着鸡犬升天了
    当然这些东西对性能的要求比较高,也没啥网络请求,主要是跨平台,风格统一可扩展之类的需求
    ( Photoshop 和 ZBrush 俩没用 Qt 也没 Linux 版的一旁瑟瑟发抖)

    Electron 这东西啥时候能不一个应用都带一个 100 多 M 的 runtime 我就不黑他,浏览器这么一个天然 monolithic 的东西好像解决这个问题很蛋疼 ...
    恐怕唯一不介意这么大一块破烂进来的软件只有单机游戏了( http://blog.wolfire.com/2009/07/a-webkit-primer-part-1/)
    JerryV2
        54
    JerryV2  
       2017-12-14 08:13:54 +08:00
    @secondwtq
    好久不用 Qt 了,还以为 Qt 凉了,还好,还好
    Akkuman
        55
    Akkuman  
       2017-12-14 10:05:08 +08:00 via Android
    @evolify golang 哪个界面库比较好用
    nicevar
        56
    nicevar  
       2017-12-14 10:25:40 +08:00
    @jahan 我觉得你直接从 PyQt 入手学比较好,找 PyQt5 的教程,英语不差的话直接看 python 官方 wiki 的教程,看完 Qt 的 UI 和信号槽部分就可以入手做了,如果你想从 C++开始把 Qt 一整套全部系统学习,周期比较长,受挫感也强,当然时间够的话也可以,毕竟技多不压身
    evolify
        57
    evolify  
       2017-12-14 13:42:05 +08:00
    @Akkuman 说实话 golang 写界面我只是有了解,据说 go-sciter 不错,也是用 html 写,不过打包差不多就 3M 左右,可以尝试下。大学的时候玩过 mfc 和 wpf,后来实习的时候用 java 写界面,从 swing 到 javafx,感觉 javafx 还不错。再后来自己玩过 nwjs,再到 electron。再后来就搞 web 前端和后台了。感觉 electron 体积确实是个问题,当然如果技术栈用这个或者自己写的玩玩的话就无所谓。
    evolify
        58
    evolify  
       2017-12-14 13:43:23 +08:00
    更正一下,公司技术栈。。。
    REB
        59
    REB  
       2017-12-14 14:16:53 +08:00 via Android
    @jahan 楼主 那个日文看不懂
    secondwtq
        60
    secondwtq  
       2017-12-14 23:04:18 +08:00
    提到 JavaFX,我今天早上不知道在找什么恰好找到了这贴子
    https://reddit.com/r/programming/comments/740bcd/say_no_to_electron_building_a_fast_responsive
    里面提到了可以用 Java 9 新的 module system,配合 JavaFX,把 JRE 打包进去

    听起来非常“ enterprisey ”,不那么 enterprisey 的是,这套方案应该还没有人用 ...

    这贴子里面也有 sciter 作者的回复,感觉很厉害
    我也赞同他“ UI needs multiple DSLs ”,以及浏览器的路线和方向是对的,但是执行上出了问题导致不适合做 UI 的看法
    yaolixing
        61
    yaolixing  
       2018-04-29 01:43:50 +08:00 via Android
    试试他山框架挺不错的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5392 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 07:02 · PVG 15:02 · LAX 00:02 · JFK 03:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.