这是我给 Electron 开的减肥药,你觉得行么? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
gowl
V2EX    问与答

这是我给 Electron 开的减肥药,你觉得行么?

  •  
  •   gowl 2018-02-16 07:27:47 +08:00 16345 次点击
    这是一个创建于 2809 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Electron App 的大小一般在 100MB+,压缩后一般在 50MB+。我们假设这个体积比较大,受不了;另外假设我们想用 HTML + CSS 的方式来构建跨平台 UI,而不是使用 Native 的解决方案,并且。那么为了给这种 App 瘦身,可不可以这么做:

    一个 Apache 服务器差不多 2MB 左右。打包一个处理动态请求的服务模块假设十几 MB 大小。这样我们可以做一个可以分发到客户端的 web 服务。并且这个东西的大小在 20 MB 左右,这是可以接受的。然后用户通过 http://localhost:1234/app 这样的地址通过本地浏览器来访问。

    这样做完其实就跟 Electron 没什么关系了,不过还是拿他来做比较。另外假设我们想要的是能用 HTML 做 UI,而不一定要用 JS 来完成整个 app。

    我能想到的缺点是用户浏览器里的 localhost:mnxy 比较难看。大家有什么解决办法么?

    62 条回复    2018-05-17 06:37:09 +08:00
    wireshark
        1
    wireshark  
       2018-02-16 07:30:20 +08:00
    没看懂
    xiqingongzi
        2
    xiqingongzi  
       2018-02-16 07:33:24 +08:00 via iPhone   1
    可以,但是你避不开兼容性的问题。electron 之所以大是嵌入了 Chrome 的内核,来解决不同系统下的兼容问题。你如果使用系统自带浏览器的内核,是无法解决这个问题的。
    gowl
        3
    gowl  
    OP
       2018-02-16 07:33:49 +08:00
    @wireshark 想用 HTML 做 desktop app 的 GUI,但是不想用. Electron,因为它太大了。然后在探讨一种直接把 web 服务搬到客户电脑上的解决方案,然后客户通过本地已经安装的浏览器来访问这个 app。
    noe132
        4
    noe132  
       2018-02-16 07:33:59 +08:00 via Android
    electron 能用 nodeapi 读写文件,浏览器可以么?
    gowl
        5
    gowl  
    OP
       2018-02-16 07:35:55 +08:00
    @xiqingongzi 我觉得 Windows 10 和 Mac Safari 以及 Linux 上常预装的 Firefox 都是很现代的浏览器,兼容性工作就像正常开发一个网站一样,不会特别难的。我猜。
    gowl
        6
    gowl  
    OP
       2018-02-16 07:37:54 +08:00
    @noe132 可以用 native 语言写各种服务。因为已经在客户端相当于安装了一个 web 服务器了,在部署几个服务直接和文件系统对接并不难的。
    gowl
        7
    gowl  
    OP
       2018-02-16 07:39:24 +08:00
    @xiqingongzi 上一条没说清楚,我想说 Windows 10 自带的 Edge。
    doubleflower
        8
    doubleflower  
       2018-02-16 07:44:33 +08:00 via Android
    这特么哪和哪,你说的不就是传统的 bs 程序,之前大家都是这么干的啊,和 electron 有毛线关系
    xiqingongzi
        9
    xiqingongzi  
       2018-02-16 07:49:08 +08:00 via iPhone
    @gowl 如果你确定你的用户只使用最新版的操作系统,没有问题。此外,楼上说的文件读写也是个问题。

    你说的模式我见过,以前有个郑州一个公司开发的会计考试系统就是用的你说的模式,体验一般。
    logOo
        10
    logOo  
       2018-02-16 07:52:18 +08:00 via Android
    现在的网速磁盘大小不是个大问题吧
    loading
        11
    loading  
       2018-02-16 07:56:04 +08:00 via iPhone
    没有浏览器部分,你比大小?
    binux
        12
    binux  
       2018-02-16 07:59:36 +08:00 via Android   1
    你根本不懂 electron 是干嘛的,解决了什么问题。
    zhujinliang
        13
    zhujinliang  
       2018-02-16 08:13:46 +08:00 via iPhone
    做 chrome 的扩展不就行了,像 moonlight-chrome 那样
    murmur
        14
    murmur  
       2018-02-16 08:18:01 +08:00
    貌似 nw.js 小一点?
    knktc
        15
    knktc  
       2018-02-16 08:20:05 +08:00 via Android   1
    你要不看看 pgadmin4 的实现方法?似乎类似你说的这种方式~
    gowl
        16
    gowl  
    OP
       2018-02-16 08:31:34 +08:00
    @zhujinliang 是个方法,但是这样会绑在一个浏览器上~
    gowl
        17
    gowl  
    OP
       2018-02-16 08:39:28 +08:00
    @knktc 对的,就是这个思路:)
    SourceMan
        18
    SourceMan  
       2018-02-16 08:52:06 +08:00 via iPhone   1
    你不懂 electron 解决了什么问题
    想要 size 小,直接调用系统的 webview,内核 0 大小,参照项目 macgap
    kfll
        19
    kfll  
       2018-02-16 08:55:47 +08:00 via iPhone
    cef 也够小
    hardman
        20
    hardman  
       2018-02-16 08:56:26 +08:00 via Android
    刚开源就开始搞了
    x86vk
        21
    x86vk  
       2018-02-16 09:01:04 +08:00 via Android   1
    你这么搞 不如用 qt 加上 qwebkit 算了
    873681136
        22
    873681136  
       2018-02-16 09:02:22 +08:00 via iPhone
    electron 不只是浏览器
    x86vk
        23
    x86vk  
       2018-02-16 09:02:27 +08:00 via Android
    @x86vk s/qwebkit/QWebEngine
    sagaxu
        24
    sagaxu  
       2018-02-16 09:09:27 +08:00   1
    我做过类似的,没用 apache,采用了 Go 自带的 http 服务,带业务逻辑,strip 之后大概 5MB 左右。Go 是可以帮用户打开浏览器的,不需要手动输入。如果用户能接受安装个 JRE,那就更方便了,用 JavaFX 内置的 webview。
    plqws
        25
    plqws  
       2018-02-16 09:16:21 +08:00
    楼主用过 Web 迅雷吗?
    fengyj
        26
    fengyj  
       2018-02-16 09:31:33 +08:00 via Android
    但这样用起来还是不好,浏览器毕竟不能像 node 一样调研 js 更多的接口吧(文件读写之类的)。而且兼容性也是问题。还有就是窗口设置问题之类的啊。
    gowl
        27
    gowl  
    OP
       2018-02-16 09:44:58 +08:00
    @plqws 怎么了,亲?
    gowl
        28
    gowl  
    OP
       2018-02-16 09:49:02 +08:00
    @SourceMan
    @binux 解决了什么问题啊?
    qdwang
        29
    qdwang  
       2018-02-16 09:54:27 +08:00 via iPhone
    什么年代了 100mb 根本不大,就和以前 1m 差不多
    nicevar
        30
    nicevar  
       2018-02-16 10:03:11 +08:00 via iPhone   1
    难看不是问题,是难用,反应总慢半拍,只要同类应用有原生的就不会考虑
    binux
        31
    binux  
       2018-02-16 10:20:28 +08:00   1
    @gowl Build cross platform desktop apps with Javascript, HTML, and CSS
    gowl
        32
    gowl  
    OP
       2018-02-16 10:22:50 +08:00
    @qdwang 虽然在家里下 100mb 大概需要一秒钟,但是体积总是越小越好,有时候,比如在火车上,网速就差多了。还有一个问题不是下载,而是电脑里同时运行几个 webkit 的程序,总觉得浪费资源和电
    gowl
        33
    gowl  
    OP
       2018-02-16 10:25:11 +08:00
    @nicevar 把网页做轻一点应该就会延时很小了,这个我再探索探索~
    chocotan
        34
    chocotan  
       2018-02-16 10:32:05 +08:00   1
    我电脑里装的软件占用空间排名前几的有好几个都是 electron 做的......
    tabris17
        35
    tabris17  
       2018-02-16 10:46:54 +08:00 via iPhone
    我想你对 electron 有什么误解
    my101du
        36
    my101du  
       2018-02-16 10:59:54 +08:00 via Android   2
    如果能有某种技术极大简化原生语言开发的过程和优化开发体验,并在界面库选择上能像前端一样百花齐放,让开发者高效率开发原生应用。大部分人压根不想使用 electron 做的软件,卡 慢 大。

    我的疑问是,electron 开发的软件一运行就是 500 600m 内存,真的没有办法从底层优化?还是在开发效率方面没有对手,所以没有动力去优化运行效率。
    feather12315
        37
    feather12315  
       2018-02-16 11:19:23 +08:00 via Android
    @my101du #36 还有很多内存泄漏
    bookit
        38
    bookit  
       2018-02-16 11:23:33 +08:00
    对于业界这些潮流、动向,只能默默抵制。
    run2
        39
    run2  
       2018-02-16 11:26:11 +08:00
    变 bs 架构 最大的问题就是你的服务器抗的住么
    收不收费都会很难搞
    gowl
        40
    gowl  
    OP
       2018-02-16 11:34:25 +08:00
    @sobigfish 服务器软件是在用户的电脑上。整个 app 是不用联网的
    gowl
        41
    gowl  
    OP
       2018-02-16 11:36:15 +08:00
    @tabris17 有什么误解?
    dtysky
        42
    dtysky  
       2018-02-16 12:21:26 +08:00
    electron 还解决了和一些浏览器做不到的系统调用问题。。。你真的有所误解
    omph
        43
    omph  
       2018-02-16 12:30:37 +08:00   1
    至少解决了桌面集成问题。
    不过安装多个 electron app 时,倒可以考虑共用一个 chome 内核,这样安装空间可以少些。
    至于运行占用,除非搞个精简版 chrome,不要的特性通通去掉,多进程架构也可以改。
    awing
        44
    awing  
       2018-02-16 12:40:40 +08:00
    electron 的核心价值这就被你抹杀了。。。。
    murmur
        45
    murmur  
       2018-02-16 12:43:29 +08:00
    @plqws 迅雷不是用的 lua 做的界面么
    applehater
        46
    applehater  
       2018-02-16 13:29:09 +08:00 via iPhone
    UWP 支持用 HTML Javascript 打包后也很小,因为系统统一提供了运行环境。
    fcten
        47
    fcten  
       2018-02-16 13:51:44 +08:00
    早就有软件这么做了,不提供 native ui,只有 web 管理界面。事实上内嵌一个 http 服务只需要几十 K 的库就够了。
    electron 就是为了解决这种需求才出现的,它帮你解决了很多通用性的问题。
    就好比人为了代步发明了汽车,你现在说汽车费油笨重不环保,我们还是骑自行车吧……
    lxml
        48
    lxml  
       2018-02-16 14:40:24 +08:00 via Android
    100MB 相比解决的问题,真的不算什么,就像静态编译和动态编译,在 2018 年我觉得无需争论
    plqws
        49
    plqws  
       2018-02-16 15:11:29 +08:00
    @murmur “ Web 迅雷”,迅雷的早期产品
    murmur
        50
    murmur  
       2018-02-16 15:20:45 +08:00
    @my101du 如果一个软件牛逼到一定程度或者垄断到一个程度 再垃圾也有人去用

    优化是有的 QQ 当时就花了大力气内嵌了 chrome 你看别的 chrome 都是一个文件几十 m 的运行库 qq 音乐的 dll 都是几 mb 几 mb 一大堆
    murmur
        51
    murmur  
       2018-02-16 15:23:16 +08:00
    更正是一下 是网易云音乐
    QQ 音乐现在好像内嵌了一个 QQ 浏览器
    ysc3839
        52
    ysc3839  
       2018-02-16 18:35:30 +08:00 via Android
    这么做主要是为了解决兼容性问题。
    Windows 平台在 Win10 之前都只有 IE,而且 IE 已经不再更新。这样的话就不能使用新的 HTML 特性。Win10 有 Edge,但是调用起来还是有点小坑的。
    Linux 平台系统没有提供 Web 内核,估计只有使用 CEF 这类嵌入式内核,不可避免要带上一整个内核。
    macOS 可能是最简单的,系统自带了较新的内核。至于有没有什么坑我没用过就不知道了。
    g00001
        53
    g00001  
       2018-02-16 18:38:01 +08:00   1
    这些东西也还是要看软件开发者各自的需求,区分需求具体对待,有一些软件的确是不怕大,越大越好卖钱,但也不是说你写个软件觉得越大越好,所有人都一定也得是相同的想法,对于大多数共享软件,几 MB 还有很多人嫌大了,如果动不动就几百个 MB 起步,估计大多数共享软件下载站都得关门了。有很多用户一看你的软件上百 MB,扭头就走了,毕竟不是每个软件开发者都是腾迅、网易,要用户忍受你的体积,你先得有他那么大的底气呀。

    而且软件的体积大,占用的资源一般也会大,例如 chrome,多开几个网页,8G,10G 的内存就没有了,一个网页就得启动一个 chrome 进程,不要以为开发者自己配的内存大,小白用户个个内存都很大。而且别人愿意 chrome 耗很大的内存,不见得对每个共享软件都有这种耐心,要是桌面上开几十个进程,个个都想占个 8G,10G 的耗光用户的内存,那就笑话了。

    如果希望开发的桌面软件体积小一点的,可以试试 aardio,aardio 一个主要特色就是体积小,开发工具带全部标准库也就 5.6MB ,虽然体积小功能可并不少,接口丰富,而且还可以嵌入调用 Java,C#,Python...这一大堆的第三方语言,非常方便。

    用 aardio 嵌入浏览器也很方便,可以嵌入一个很小的 HTTP 服务端,服务端支持类 PHP 的模板语法(关键还可以直接调用系统 API 这些),支持系统自带的浏览器控件,带精简版的 WebKit 控件 3MB,也支持 chrome 的精简版的 blink 控件,也可以用来嵌入 electron。

    发一个 aardio 范例里的 asar ( electron 发布打包格式)文件管理器,类似这种软件用 aardio 要不了几句代码就能写出来。 像这种一些小的软件,几句代码可以搞定的事,几百 KB 可以搞定的事,非要上个几百 MB 的框架,没有必要吧。

    开着豪车非要去骑自行车,这的确是不对。
    但是要知道,满大街更多的是自行车,你溜个菜市场,还不愿意骑自行车,非要把房车挤到菜市场里去买菜,理由竟然是越大就一定越方便,越高级,这就不合理了。
    ysc3839
        54
    ysc3839  
       2018-02-16 18:59:49 +08:00 via Android
    @omph 共用的话问题就更复杂了,不同软件使用的版本不同怎么办?我想使用新版本的,而有的软件用旧版本的不升级。
    还有安装卸载的问题,第一个软件装上了这个共用的内核,那卸载时删不删?删掉的话如果别的软件也依赖呢?不删的话不是浪费空间?
    Osk
        55
    Osk  
       2018-02-16 19:37:47 +08:00 via Android
    emm,以前买 Crucial SSD 的管理软件就是这样搞的,安装包很大(相对其它家),调用浏览器访问 loclhost:???,体验相当糟糕,IE 有兼容性问题,Chrome 倒能用吧,如果不是性价比还行,就冲这软件就得给差评。似乎 server 端是 java 搞的,最后还告诉我没检测到 SSD。。。不知道现在改进没
    tsl0922
        56
    tsl0922  
       2018-02-16 21:14:53 +08:00
    这里有个现成的轮子: https://github.com/zserge/webview,劣势就是没法利用 nodejs 的各种库了,但是也可以 js 和 c/go 交互。
    omph
        57
    omph  
       2018-02-16 22:03:56 +08:00
    @ysc3839
    浏览器内核可以独立安装,如果 app 不兼容当前内核,可以装自己打包的,总之给用户选择权。
    删不删属于软件依赖问题,由包管理系统解决。
    gowl
        58
    gowl  
    OP
       2018-02-16 23:13:17 +08:00
    @g00001 aardio 跨平台么?
    ysc3839
        59
    ysc3839  
       2018-02-18 09:44:15 +08:00 via Android
    @omph Windows 没有包管理。
    ysc3839
        60
    ysc3839  
       2018-02-18 09:56:34 +08:00 via Android   1
    @gowl 看了一下,似乎是 Windows only,不开源,感觉是个人维护的项目。我认为用在实际项目中不太现实,只适合个人使用。
    g00001
        61
    g00001  
       2018-02-18 20:36:05 +08:00   2
    你说的“只适合个人使用的编程语言” - 在这个世界上并不存在。这个推理本身就有点矛盾。简洁灵活并不是缺点,个人都用不好的编程语言 - 团队也不可能用好。
    别看 aardio 只有 5.6MB 这么小的体积,功能并不简单,可以用来写企业 ERP,参考开源项目 https://github.com/carlaau/aardio-erp 可以用来做网站写个论坛都很轻松,例如 http://www.jianma123.com/

    然后你所说的,打开随便看了一下,马上就总结出 aardio 不适合用于“实际项目” - 这个把个人开发的项目理解成了一定是不实际的项目,实际上很多优秀的桌面软件都是个人开发的。aardio 历经 14 年的开发,更新活跃,不可能是用来做不实际的项目,这样的话也不可能论坛有几万帖子,大量开源代码,第三方群都有一千多人。

    aardio 也算不上是你所说的完全不开源、个人维护的项目。aardio 本身就是一个开放的框架,主要的特性和功能使用开源的标准库提供,要不了几句代码就可以扩展一个模块,类似在 aardio 中嵌入 Java,C#,Python.....这些编程语言,以及嵌入 Webkit,Electron.....这些浏览器控件,这些功能都是由标准库中无保留的开源模块提供的,对于桌面软件,核心开源的语言都容易被研究破解反编译出源代码的,而这对于多数桌面软件是致命的,aardio 出于保护用户软件的目的不开源核心运行时 - 没有什么问题,不开源的桌面开发工具实际上很多。

    说到跨平台,对于桌面软件,除了 Windows 其他操作系统的市场占有率可以忽略(例如 electron 跨平台是有代价的 ),并不是所有桌面软件都有必须跨平台的需求。所谓跨平台,也并不一定就要是 100%的跨平台,并不是所有操作系统提供的接口、特性都是完全一样的,实际上单纯的用 electron,像调用 WINAPI 这些简单的事都做不到,aardio 不一样,虽然是嵌入浏览器壳子,在 Javascript 里就可以直接调用 WINAPI,非常的方便。

    适不合用于“实际项目”,关键看这个“实际项目”是干什么,aardio 的优势就是小,可以使用原来已经熟悉的语言和技术写桌面软件,相比 VC,VB 这种要投入多年时间去学习的开发工具要方便很多。
    yaolixing
        62
    yaolixing  
       2018-05-17 06:37:09 +08:00 via Android
    切可闹,推荐他山混合开发框架,内嵌 gecko v52,支持 xp+,linux,android
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2504 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 03:49 PVG 11:49 LAX 20:49 JFK 23:49
    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