为什么 Electron 不推出公共运行时?

2023-01-22 12:45:11 +08:00
 a1knla

根据我用 electron 做 demo 的经历来说,我猜测它从技术上是可以分离出公共运行时的吧,没必要每个成品都自带一个浏览器内核,而是像.NET 一样如果运行时不存在,就引导用户下载一次,一劳永逸。还是因为我对 electron 的了解过于浅薄,实际上以上内容是无法实现的?

4066 次点击
所在节点    前端开发
27 条回复
streamrx
2023-01-22 12:47:53 +08:00
1
agagega
2023-01-22 12:51:03 +08:00
不要指望用户会去主动安装一个什么东西,Windows 下载.NET 运行时这么方便都还有人搞不清
a1knla
2023-01-22 12:58:21 +08:00
@agagega 记得以前 win 不自带.NET 的时候,如果有软件需要,win 是会给弹窗然后直接一键下载的,用户只需要点一下鼠标,非常的方便,虽然由于各种原因,还是不少用户求助如何装.NET...
oott123
2023-01-22 13:00:29 +08:00
版本太碎片化了,万一带了个什么锁版本的原生模块,或者用了什么特性就炸了
mejee
2023-01-22 13:00:47 +08:00
我不想让我的用我的软件的时候,再去下载个运行时,纯属给用户添堵
kaneg
2023-01-22 13:02:04 +08:00
每个应用所需的版本不一定一样,你应该不想安装一个新应用,另一个旧应用挂了。
如果你又想本地保留多个版本,那又会带来新问题,即你的应用删了,你的公共运行库不想删,久而久之它们又会变成垃圾。
Bingchunmoli
2023-01-22 13:05:22 +08:00
@a1knla 大部分应用并不会弹窗遇到各种 dll 报错,或者让你去安装,不用 Google 微软官网都找不到,每次都要在下载站找
westoy
2023-01-22 13:06:22 +08:00
DLL Hell 了解下

Go 为什么一开始把静态编译当卖点

比起出各种奇奇怪怪的问题折腾来, 百来 MB 空间简直不要钱一样
a1knla
2023-01-22 13:09:57 +08:00
@oott123 @kaneg 感谢,我知道 node_modules 肯定是不能共享,我主要是不理解,js 解释器这种极其底层的东西也需要人手一个吗
ochatokori
2023-01-22 13:15:54 +08:00
以前 aur 有些应用就是共用系统的全局 electron 的,但是自然也会经常遇到不兼容的问题,现在不知道还有没有了。

现在的游戏动不动都几十上百 G ,没必要为了这几百 MB 的容量经常花时间处理兼容问题,有这时间打游戏不香嘛
a1knla
2023-01-22 13:16:46 +08:00
@westoy @Bingchunmoli 感谢,每个 app 的依赖确实应当跟着打包进去,但是举例来说,win 中也存在 user32.dll 这样的 非常底层的库,很少见有自带的吧,对 electron app 来说,我猜 js 解释器应该就是这种底层的东西,如果把它抽离出来,或许也是能缩小包体的
binux
2023-01-22 13:18:21 +08:00
没有公共运行时是个 feature ,为什么要把 feature 去掉?
iseki
2023-01-22 13:19:07 +08:00
@a1knla 没这么底层,一定要说,它可能还不如 JVM 结实,起码人家的二进制接口非常稳定。和 user32 对标的,大概是 glibc 了,即使如此 Linux 上也常常出问题
sun1991
2023-01-22 13:23:41 +08:00
以前 jQuery 流行时也有讨论说为什么浏览器不内置,完全想不到几年后 jQuery 就淘汰了。
runze
2023-01-22 13:31:43 +08:00
不要用现在的经验去看当时的问题。

1:当时的几个需要用户安装运行时的前辈要么已经死了、要么正在死去,比如 flash 、adobe air ?(忘了具体名字)、silverlight 。

2:当你电脑上有十个 electron 软件时,你觉得应该有一个公共运行时。但回到 electron 刚诞生时,ab 两个新软件,a 是绿色的下载就能运行,b 却需要先安装一个没听过的运行时污染你的系统,你会选哪个?
runze
2023-01-22 13:36:49 +08:00
兼容问题是结果而非原因:如果当初 electron 是全局运行时的模式(而且奇迹般的流行开来),开发者在开发时自然会对齐版本、考虑兼容性(不过我觉得这样肯定不会让开发者喜欢)。

.net 有个好爹,不是 electron 这种野生动物可比的,而且就算好爹也救不了 Silverlight 。
a1knla
2023-01-22 13:38:33 +08:00
@ochatokori @binux @iseki @sun1991 @runze 明白了,感谢解答!
sakura6264
2023-01-22 14:25:40 +08:00
不要高估了普通人的知识水平和理性程度。.NET 运行时很方便,然而非程序员团体能弄明白这玩意的很少,而且软件下载完普通人打开发现还需要再下载个什么东西,这些人会不耐烦,比起稍费一点力“折腾”这一下,他们可能更喜欢贡献一点硬盘。
这也说明了为什么有些大得像操作系统的软件一样有人用。
learningman
2023-01-22 14:55:29 +08:00
@sun1991 #14 其实也已经内置了,dom 上的那些 api 多少有 jquery 的影子
n18255447846
2023-01-22 16:10:53 +08:00
我觉得很多人没回答到点上。electron 笼统地说可以分为 3 部分:界面渲染内嵌 chromium 、后台运行环境内嵌 nodejs 、用 c++写的跨平台 api(例如 dialog)。

单说渲染用的 webview 吧,完全能独立出来,现在 win10 上的 edge 也剥离了一个叫 webview2 runtime 的东西,貌似 linux 上有个包 lib-webview 。

这相当于 denpendency ,存在版本问题。对于普通用户,可能还需要额外的步骤(门槛)。就用户体验而言,安装即用是最佳的,和市面上大部分公司的应用一样

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

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

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

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

© 2021 V2EX