电脑里的 Chromium/CEF/Electron 越来越多了

2020-03-26 16:09:17 +08:00
 nyanyh
Chromium
Steam
VSCode
Docker 里面带的 Docker Desktop
Postman
Unity Hub
Notion
微信开发者工具( nw.js )
英雄联盟客户端

一个个功能没多复杂,程序大小 300M 起步
为什么不做一个 Electron Runtime,所有程序共享
22316 次点击
所在节点    程序员
167 条回复
augustheart
2020-03-26 23:58:09 +08:00
@hst001 游戏那边大的基本上都是贴图,还有动画。比如年货 cod,高清动画容量占半……
但是性能真的一点也不过剩,硬件机能完全没有赶上材质与分辨率的增长……
l00t
2020-03-27 00:17:43 +08:00
共享 Runtime 就是版本问题严重呗。
baobao1270
2020-03-27 00:23:15 +08:00
感觉是 IE 的锅…… Windows 的 MASL,Office,一大堆东西内嵌网页都是用的 IE,可惜 IE 不争气,如果哪天把 Chromium Edge 变成系统组件该多好。
secondwtq
2020-03-27 00:32:49 +08:00
理论上当然是可以共享的,Linux 包管理就做得很好
"很好“的意思是现在我平常使用的唯一 Electron 程序——VSCode 被拆开了,然后就如楼上几位所预料的一样,出现了这种结果: https://www.archlinux.org/packages/?sort=&repo=Community&q=electron&maintainer=&flagged=
点进去会发现虽然 Electron 感觉上无处不在,依赖这几个”共享“的 Electron 包的包两只手就能数的过来,最大用户是 VSCode 和 Atom,以及 Keybase 、Signal 、Riot 等几个互联网应用。并且 VSCode 和 Atom 依赖的版本都不一样——也就是说如果我要同时装 VSCode 和 Atom,还是要装俩 Electron 。假设你装 8 个 Electron 应用,可能这 6 个版本的 Electron 还是都会出现在你的硬盘里(虽然 Arch 的软件源里面并没有 8 个 Electron 应用可以给你装 ...)

尽管如此,相比于 8 个应用需要装 8 份运行库,现在装 8 个应用需要装 6 个运行库,还可以以包管理的方式组织起来,我仍然认为这是一种严格的提升。但是显然这并不直接解决楼主的问题,重要的是这种现象给咱们的启发,我的观察如下:

* Linux 生态系统受 Electron ”污染“ 较少。
* “互联网”应用更倾向于使用 Electron——上面列举的几个 Linux 下使用 Electron 的应用,都是互联网应用或有互联网背景。Linux 生态本身互联网应用较少,所以 Linux 下 Electron 比较少。同理使用 Electron 的应用肯定是桌面应用,Linux 桌面应用也少。
* 要想共享运行时,用户环境必须有一个可信任的、被公开承认的中心全局软件库。Windows 和 Mac 并非没有这样的软件库,这种软件库一直在起作用——MSVCRT 、.Net 运行时、DirectX 、ObjC 运行时、Cocoa 等都是通过这些系统中的中心软件库分发的,但是很明显在这些专有操作系统中,中心软件库仅仅对第一方软件实际有效。Linux 虽然看起来做得更好,但是软件库是由发行版管理,当讨论“Generic Linux”的时候,中心软件库(具体的包管理机制)是一个“存在但不可用”的状态。虽然很多软件并不鸟所谓“Generic Linux”,而是只做 Debian 、CentOS 等主流发行版,并非每个发行版的软件库都能保持最新,因此很多软件在 Linux 上分发时依然将 Electron 打包进去了( Arch 把 Electron 从 VSCode 中拆出来是社区行为)。
* 这里还要提两个特例,第一是 Linux 的包管理方案并非完美,比如 Arch 一个臭名昭著的问题: https://old.reddit.com/r/archlinux/comments/6jce9x/pandoc_minus_the_new_750mb_haskell_nonsense Electron 一个开发 GUI 程序的库,不过 150M,pandoc 一个 native CLI 程序却要装 350M 的额外库。第二是各种编程语言的包管理机制,就算是做得最烂的,单独来看相比于系统级的软件管理还是要优雅太多。
* 开源软件一般都能实现运行时的共享。开源软件的开发模式一般是核心团队维护中心仓库,所有人在不同的环境下工作(包括核心团队的环境也是不一样的),中心仓库只维护软件本身不维护依赖,这种开发模式决定其对环境要求不能太苛刻。开源也决定了就算开发团队不会做这个事,社区也可以帮忙拆出来。以上这几点都说明,如果软件是开源的,那么共享运行时本来就不是什么问题。
* 非开源软件一般倾向于不共享运行时。非开源软件的使用价值是绝对首位,开发者会选择把运行时和软件一起分发来最小化开发成本,以及最小化用户可能的破事。对于免费软件来说可以减少支持压力,对于收费软件还可以最大化收入。非开源软件的开发者环境一般比较固定,源码换了一个编译器版本就 build 不过是常有的事——并且就算内部发现有此类问题,一般解决方案是统一环境而不是完善项目。另外对非开源软件进行修改技术上和法律上都有问题,所以开发者不做运行时共享,其他人基本没法做。至于用户吃多少屎,那就不是开发者的事了。
非开源软件能做到什么程度?我昨晚刚看了这个 talk: <amp-youtube data-videoid="2YXwg0n9e7E" layout="responsive" width="480" height="270"></amp-youtube>?t=1723 在这个链接的时间戳,这位曾获得奥斯卡 Sci-Tech 奖的 C++ 程序员自豪地说道:为了解决客户的兼容性问题,他们有个人花了半年时间把 boost 库中的所有 boost 命名空间改名成 hboost,当然这就意味着他们还必须分发一份根本没法拆出来的 boost 。
但是由于上述的原因,就算他们不这么改,也不意味着这个 Boost 的冗余可以被消除。我系统里除了包管理器装的版本之外,还有至少 4 份 libpython 和 libQt5Core —— Electron 并不是我系统中冗余最多的运行时,Python 和 Qt 才是 ... 可见并不只是 Electron 的问题。

虽然我认为 Electron 这个工具的原罪不可忽略,但是我觉得依赖管理的问题还是要和用户界面的问题分开来谈——不仅仅是 Electron 、Python 或者 Qt 。如果你用 Mac,那在你的 /Applications 文件夹下,大概率躺着不少于十个 Sparkle.framework

在我看来,对于闭源软件来说,共享运行时一般是特例,或者说只有不得不共享的(比如 .Net, DirectX 等)才会共享。所以我对楼主的想法的看法是:开源软件已经实现,闭源软件没这传统。

关于上面的几楼胡逼内容:aardio 或者 oidraa 什么的不仅不解决根本问题,更连楼主的眼前问题也解决不了。楼主所举的几个软件都有跨平台需求,并且都是在各平台都有带量用户的带项目(不存在“支持那百分之零点几市场的操作系统有毛用”的问题)。

而根本问题则是 5L 所说,不同程序之间代码共享的问题,该问题广泛地存在于各类开源和闭源软件,GUI 程序和非 GUI 程序中,一个新的 Electron 并不能解决这个问题。
LokiSharp
2020-03-27 00:35:42 +08:00
@augustheart #96

你说我对编程一无所知是什么意思?我主要喷的点是 “没有像其他编程语言一样用到第三方的界面库,而是用纯 aardio 源码实现的,不像 Python 这些要用到 C++” 控件都是调用系统 API 绘制的,什么叫和其他变成语言不一样不需要调用第三方。区别只是它的 UI 库封装系统 API 的部分是闭源的黑箱子,看不到而已,看不到不代表不存在。

而我指出 aardio 是调用系统 API 绘制控件也只是想对他这句做回应”20 年前的 winform 能做到 aardio 这么好看啊,那我非常非常的佩服。“,其实 UI 层都是一样的,能做出什么界面和语言无关。

我的另一个理解是他想表达他写 UI 只需要用 aardio 不需要写 C++,可是 Python 用 tk 和 pyqt 也都不需要写 C++ 啊。

我很反感这语言的用户说它什么什么都是纯靠自己实现的没有依赖,和其他语言不一样,可以做的很小,打开一看一样是封装一下系统 api 。
augustheart
2020-03-27 00:43:57 +08:00
@LokiSharp 说你对编程一无所知我承认真的是嘴快手快光图痛快了,对此表示抱歉……
不过,你一直说在系统 api,我也实在不知道说什么好。
这么的吧,都散了吧……
secondwtq
2020-03-27 01:00:41 +08:00
@hst001 100L

假设你指的是近年的 3A 游戏
你可以认为看起来过大的体积已经是优化的结果。
* 游戏开发者是有限制游戏体积的动机的。比如游戏受显存容量、带宽的限制是很严重的,所以贴图的压缩很多人都在搞。
* 技术的进步本身就可以优化体积。比如我曾经折腾过的某个 2D 游戏,图形使用 256 色位图表示,该游戏中的一个角色需要 8 方向的图像,每方向都是几十帧的动画,一般几百 K 。敢做的话只要放大分辨率,单个素材几百兆都可以有。但是这只有 8 方向,也就是说转向、在斜坡上的时候是非常生硬的,并且无法更改灯光效果和影子方向。使用 3D 技术实现同等效果,只需要一个几百 K 的模型,加上几十 K 的动作,再加一个很小的贴图就可以。免费送全向的图像,随便改灯光,加动画的边际成本极小。
* 但是最后游戏的目标是尽量最大化运行时性能,因此很多地方用了类似“空间换时间”的策略。

关于贴图为什么这么大,游戏如何空间换时间等可以看我的 https://v2ex.com/t/652487#r_8689152 这个回复。

你所说的“各种奇淫巧计来优化”的时代一般是指早期专有主机为绝对主流的时代。那个时代的游戏很多是为单个平台开发,所以优化空间很大。现在是跨平台为主流(硬件性能过剩也只是 GPU 在高端游戏 PC 上,CPU 在 PC 上过剩(对我就是要黑这代的 CPU )),优化的主要目标也不是体积。现在的游戏开发者确实相对之前比较大胆,但是不会塞一堆 dead asset 进游戏,这并不会降低开发成本。游戏的体积问题和优化问题并不相关。

如果说游戏的体积真的成了一个问题,我认为问题出在游戏发展的方向上,也就是需求就是错的。
LokiSharp
2020-03-27 01:08:59 +08:00
@augustheart #106 我看了看他的代码。。。貌似他连封装都算不上,只是直接调用 Windows GDI 发消息画的 UI 。嘛,本质上和用 Python 的 ctypes 调用 GDI 库没啥区别。
Chingim
2020-03-27 02:09:54 +08:00
electron 这么流行,还不是因为跨平台 gui 库,在简单易用上一个能打的都没有

就看 flutter 能不能扛起大旗了
gcyrn
2020-03-27 06:52:09 +08:00
同样的还有 adb 、ffmpeg
iamfredng
2020-03-27 07:37:53 +08:00
@LokiSharp
你开一堆插件能怪谁哦?
写 java 你开 c#插件咯?
LokiSharp
2020-03-27 08:05:02 +08:00
@iamfredng 我测试的时候开的是单个 md 文件,我也关掉所有插件测试过相差 50M 内存,看任务管理器大部分都是 gpu 进程和编辑窗口主程吃的
不关 600MB+ 关了 550M+

你不要乱黑 VSCode,写 A 语言项目的时候 B 语言的后台分析进程是不会运行的,VSCode 团队还没这么傻
natsji
2020-03-27 08:17:52 +08:00
其实为啥不能把用不着的自动删减了呢
cubecube
2020-03-27 09:06:37 +08:00
手机里面全是各种软件自带的 T5 内核,也很烦
huohei
2020-03-27 09:11:25 +08:00
哈哈,安卓里一堆 app 共享 tx 的性能杀手 x5 内核
p1gd0g
2020-03-27 09:24:38 +08:00
如果系统能统一,这类问题是不是容易解决一些。
LiYanHong
2020-03-27 09:34:55 +08:00
@cubecube
@huohei
装了 firefox focus,发现 gmail 、酷安的 webview 变成了 firefox focus 的,应该安卓有调用机制
huohei
2020-03-27 09:48:59 +08:00
@LiYanHong 这个是 custom tabs,比较国际的浏览器都有这个功能
g00001
2020-03-27 10:08:14 +08:00
@secondwtq 你的理解有误,
我并没有说 aardio 能解决跨平台的需求,明确说了不跨平台。

另外我也并没有说能解决楼主的问题。
还有你说楼主列举的 electron 例子都是跨平台,抱歉我不想用“胡逼”这样的字眼来形容你 - 这样好像不太礼貌,我想说你在“耍流氓”可能好一点,electron 本身就是跨平台的,用 electron 举的例子能不跨平台?!

我去年写的一个软件,客户的确喷了我“支持那百分之零点几市场的操作系统有毛用”,他们要求支持市场份额更大的 XP,所以我屈服了,也许你不认同,我非常理解,但对于我来说,客户才是上帝。

另外你所谈的跨平台 - 我并不反对,因为我也用 electron 做了很多项目,需要跨平台的时候我用 electron,不需要跨平台的时候我就用 aardio 。

我的意思是,electron 之所以体积大 - 跨平台是一个重要因素,不跨平台就会体积小,而不是说 aardio 即能体积小又能跨平台,能完美百分百的解决所有需求,我没有这个意思,谢谢!
LokiSharp
2020-03-27 10:12:52 +08:00
@g00001 #119 看了看你的回帖历史,每条都是其他语言怎么怎么不好,aardio 最强,你是一鹤么?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/656419

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX