有个疑问,如果都觉得 Electron 是电子垃圾,那为啥不直接用用户的浏览器做 UI 而不是自己封一个 Chromium

2023-11-22 20:43:11 +08:00
 luyinge

只是疑问,如果一个 Electron 应用将 Nodejs 部分打包成二进制文件,然后使用系统原生平台做一个启动按钮,点击后直接执行这个二进制文件 + 启动一个本地 http server 用来在 localhost 上展示前端 UI 界面,通信直接走 socket

这么搞初看上去好像也没啥毛病,当然肯定会存在很多限制,不知道这种限制会是啥?为啥都没见到有人这么玩过

21382 次点击
所在节点    前端开发
125 条回复
wanguorui123
2023-11-22 21:46:11 +08:00
Electron 的下限很高,没有平台限制
mxT52CRuqR6o5
2023-11-22 21:49:35 +08:00
Mac 能装 ios 应用,我发现 ios 原生应用比 mac electron 应用要大的多
iorilu
2023-11-22 21:55:23 +08:00
为啥要用 nodejs, 还不是为了能访问系统 api, 文件系统等等

要不然为啥不直接连服务器得了
mogita
2023-11-22 21:58:12 +08:00
henix
2023-11-22 22:02:18 +08:00
https://syncthing.net/ 的电脑端就是这么做的,直接调用了用户的浏览器
MIUIOS
2023-11-22 22:03:51 +08:00
浏览器一堆限制,基本的 IO 都是在限制条件下使用,nodejs 让 js 摆脱了浏览器的种种限制,建议了解一下他的用处就知道了
NoOneNoBody
2023-11-22 22:06:02 +08:00
做 WebGUI 是 server 和 client 在同一个实例中,调起浏览器是 server 和 client 在同一个设备,但不在同一个实例

前者可以控制 client 的 request 和外观,后者不能完全控制,还会受到浏览器本身的扩展和脚本影响,如果某些扩展有安全性问题,还会引发数据安全(中间多了一个或多个风险环节),另外就是接管 request 的高级玩法,用 browser 做不到
0o0O0o0O0o
2023-11-22 22:16:18 +08:00
有,而且这种轮子还挺多,最大的问题就是你面临未知的浏览器版本

以及,赞同 #19
SilencerL
2023-11-22 22:17:50 +08:00
用你说的这种做法,二进制+浏览器+Socket ,最终会随着项目越来越复杂需要的功能越来越多开始遇到通信上的瓶颈,重构变成下一个 Electron

要不然 Electron/NW.js 等等之流为啥要费吃巴力的用各种办法把 Nodejs 和浏览器的 js 上下文粘合在一起呢…
binghongcha
2023-11-22 22:24:34 +08:00
electron 的好处是,

可以拿到操作系统的权限,比如可以读写一些本地文件。比如本地笔记管理 Typora 、Eagle 。
此外可以使用最新版本的浏览器内核,使用一些新特性,也不用考虑兼容问题。
离线也能用,一些编辑器可以做成离线的。
可以开很多窗口

缺点就是安装包太大了,然后本质其实是套壳浏览器,占用内存高,写代码还得用 js ,比不上原生的性能
SHF
2023-11-22 23:03:50 +08:00
我赞同你的观点,浏览器负责 ui ,node.js 负责与操作系统交互,保存持久化数据。两者数据交换通过 websocket 进行 rpc 调用,很完美,
唯一不足的是没法看起来像一个有单独界面的程序(托盘、任务栏、窗口等等)
danbai
2023-11-22 23:37:41 +08:00
我之前做过一个任务栏工具就这样的,起一个 http 服务器
jiangzm
2023-11-22 23:49:34 +08:00
纯前端部分没什么差异,好比一个前端项目可以直接用 Electron 打包起来。

但是一般用 Electron 不仅是前端项目呀, 还有 node 服务端甚至集成定制化化扩展,这些"本地能力"是纯前端项目受限制或没有的。

一个简单的需求 启动本地程序,这中 web 项目是做不到的
miaomiao888
2023-11-22 23:52:44 +08:00
@thinkm 反了吧,程序员才不在乎,只在乎能快速出程序或获利,甚至自己都不用,只有用户受伤害,拿浏览器开发程序的就是一坨坨大便,包括 STEAM 网易音乐那些大厂。
AV1
2023-11-23 00:13:04 +08:00
我感觉你可能需要的是 Neutralinojs ,后端是 C++写的一个本地服务器,前端可以让你选择用 webview 、chrome ,甚至可以远程访问 UI 界面。
https://neutralino.js.org/docs/configuration/modes
passive
2023-11-23 00:31:12 +08:00
重新发明 flash ,再不行重新发明 java applet 也算
6IbA2bj5ip3tK49j
2023-11-23 00:39:28 +08:00
2010 年前后,国内有一段时间很流行这种做法。
各种 web 版 xx 。实际上就是本机启 web server ,然后给你打开网页,我印象比较深刻的就是 web 迅雷了。
dont39
2023-11-23 00:39:51 +08:00
Leonard
2023-11-23 00:42:34 +08:00
@miaomiao888 你说的程序员是程序员开发者,他说的程序员是程序员用户
AoEiuV020JP
2023-11-23 00:52:08 +08:00
我最近在找 rss 客户端,感觉 electron 就很符合我的需求,内置一个浏览器,必要时也可以用外部浏览器打开,两边可以登录不同的号,
我原本在用 quiteRSS ,功能 OK 但内置浏览器过时太严重了,而且太吃内存,所以想找个 electron 实现的,
找到个 Fluent Reader 挺中意的,就是 electron 实现的,但作者好像不太喜欢内置浏览器,好多 issue 提议优化内置浏览器作者要么无理由拒绝要么直接无视,
只好自己 fork 改改,感觉挺满意的,平时刷 V2EX 就用这个了,

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

https://ex.noerr.eu.org/t/994305

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

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

© 2021 V2EX