求教写跨平台的桌面 gui 程序, electron 是不是个好的选择? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jahan
V2EX    Node.js

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

  •  
  •   jahan 2017-12-12 20:31:32 +08:00 20829 次点击
    这是一个创建于 2876 天前的主题,其中的信息可能已经有所发展或是发生改变。
    目前看下来,个人觉得好处好像是,可以直接用网页的 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  
       span class="ago" title="2017-12-14 10:05:08 +08:00">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     Solana     4268 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 05:33 PVG 13:33 LAX 22:33 JFK 01:33
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86