技术解析

用过 Electron/CEF 这些,感觉不太行
0
2021-06-10 23:11:19
idczone

Electron 太慢 CEF 太麻烦 索性我现在界面都用网站,同时起一个本地服务,然后有什么浏览器无法执行操作,通过 http 请求发送到服务交由它执行,感觉抗投诉服务器现在这样最舒服,不知道你们有没有什么建议。


winform 最简单..

试试 Tauri ?
https://tauri.studio

.NET with chrome

windows 可以用 WebView2

我就是这样做了,为了省力,舒服,就用网页做 GUI 。最大的缺点是用户在心理上很不接受这种方式,别看 V 站好像很多人讨厌 Electron,但现实是很多人宁愿下载几十 M 文件,宁愿启动慢,也不愿用普通网页界面。

其实 Electron 还是很舒服的,比普通网页好用多了,可以自定义很多浏览器没有的功能

figma 就是楼主说的架构,纯网页内容,但是本地有一个执行文件,就只有一个 EXE,监听本地三个 http 端口。
如果网页需要调用 win32 api 之类的,就直接往代理 exe 发送 http 请求。

其实我很喜欢 sciter 的技术路线,可惜项目去年众筹开源失败了

electron 并不慢,优化下使用方式是不是有问题
目前个人感觉除了内存占用问题其他方面都优于其他方案

ActiveX

pywebview

electron 这东西想用好很难。直接看 electron 用得最好的那几个软件:vscode,discord 就行了,有几个用 electron 的能把软件用得像这些软件一样好呢

这就是所谓的 大厂开源出来你也玩不转的东西

???
迷惑行为,难道你的浏览器不占 CPU 和内存不是一个 Chromium 吗。。。
你这几个东西加起来不就是一个 Electron 吗。。。
凭啥你逻辑放 Electron 的 Chromium 里面就慢了,放浏览器的 Chromium 里面就快了。。。

flutter 一把梭

我觉得是因为把大部分计算工作都放到后端服务里,也许效率会高一些?

对,我也喜欢这么做,Electron 优点无非就是能直接访问文件系统,比如操作大文件可以随机读写,节省内存,用服务器方式就得不停复制(要不自己定制协议曲线实现),不过新版 Chrome 开始支持 File System API 了,也就能直接随机读写了。

jxbrowser 可以试试

electron 很吃内存啊

客户端还是不要套了,要么直接 pwa,要么直接 native

winform wpf maui

把 gui 做成 pwa 安装后就跟 electron 一样了。不过怎么做到启动 exe 的时候打开 pwa 应用这个还没调查过。

wke miniblink 这一类也可自己绑定函数实现自定义 js,是一个不错的选择。优点大小只有 10MB,缺点是 wke 开源在 2010 年后就没有更新了, 只能支持少量 html5, 如果熟悉 html4 写起来还是舒服的

因为用户认为浏览器启动时间不算在你的应用启动时间里,况且大部分时间浏览器早就开着了,只是打开个新标签页而已。

wke 还有优点是自己带 webkit 渲染,不会说 win7 就用 ie 内核 win10 就用 edge 省去兼容多个浏览器内核的操作。 这一点比 pywebview 好

建议自己先做出来一个 demo 给大家看看

同推 Tauri

我觉得 miniblink 功能上做得很好,可惜作者人为地把项目受众限制在了中文用户中,整个项目充斥着中文,并没有考虑国际化。
我甚至觉得 CEF 的作者技术是不如 miniblink 的,因为 CEF 并不懂得精简内核。CEF 之所以流行可能只是因为它国际化做得好。

Electron 不但是体积大,多进程架构交互很麻烦,以前有个 remote 稍微缓解了一点,现在又说 remote 有问题,remote 慢一万倍,用 remote 政冶不正确。如果是 Windows 平台(其实桌面软件非 Windows 平台的市场份额小到基本可以忽略),换个思路利用 aardio 可以在任意网页浏览器里调用本地函数,支持微信浏览器这些 。
第一步:在网页里引入 aardio.js ,JavaScrip 这边的代码:
import aardio from 'aardio';
aardio.test("这是网页调用 aardio 的参数",1122);
第二步:在 aardio 里加上代码:
import web.rpc.externalServer;
var externalServer = web.rpc.externalServer();
//导出网页可调用的函数
externalServer.external = {
test = function(...){
winform.edit.print("external.test 被网页调用",...)
}
}
非常简单 ,完整代码参考 aardio 自带范例( web 应用->rpc 目录),类似的 aardio 标准库还提供 chrome.app 可以调用系统自带的 Chrome( 兼容 Edge 等浏览器 ) 制作软件界面,方法跟上面类似,只要在网页引入 aardio.js 就可以。
aardio 里其他一些浏览器支持库
1 、web.sysView:基于 WIN10 系统自带的 WebView1,Chromium Edge 内核,好用体积小。
2 、web.view:基于微软 WebView2,共享运行库,最新 Chromium Edge 内核,非常好用,支持导出 COM 对象,比 Electron 那啥 remote 简洁太多了。
3 、web.form: 基于已经普及的 IE11 内核组件(系统组件,不受微软移除 IE 浏览器影响),支持 React,系统自带,占用体积为 0,最大的优势是 COM 接口非常简洁。
4 、web.sciter: 基于 Sciter JS , 支持新新的 ES6 语法,体积迷你,专用于 桌面 UI 浏览器组件,非常好用。
4 、web.layout: 基于 HTMLayout , 专用于 桌面 UI 浏览器组件,非常好用。
6 、web.blink: 基于 MiniBlink,精简的 Chromium 内核,体积非常小,提供了丰富的接口.
7 、web.kit: 基于精简版开源 WebKit( WKE ) , 全积比 MiniBlink 还要小。
8 、web.cef3: CEF3 的 ActiveX 组件。
9 、electron.app: 这个是对 Electron 封装了一层,所有使用 electron.app 的软件共享一个运行库,所以生成的 EXE 可以极小,并且可以将 Electron 作为子窗口嵌入原生界面,不必全部依赖 Electron 。
其实可以替代 Electron 的方案很多,不是每个软件都需要 Electron,或者说其实很多软件并不需要过于依赖浏览器,例如开源软件 wubiLex,功能非常多,界面也不错,但下载包体积只有惊人的 900KB,整个界面基于 aardio 中开源的 plus 控件实现。

QWebEngine*(
战网的客户端是 Qt + Vue (具体用的是 QWebEngine 还是 QWebView 就没深究)

cef 是把 chromium 直接嵌入软件,目标是在桌面软件中展示网页,miniblink 的设计目标是精简 chromium,设计一个 UI 渲染器。两个产品设计思路不同,直接对比不太恰当。

我投 QT 一票(手动滑稽)

可以看一眼 Qt

可以尝试 webview2

我不认同,实际上 Electron 出来之前就有用 CEF 做界面的程序了,比如 Adobe 的 Brackets 。
许多程序也用 Qt 的 WebView 来做界面,也不见 Qt 进行什么裁剪。

英雄联盟客户端就是这么做的,

qt 那个 web engine 压缩后只有 25M

战网客户端说真的,卡得不要太惨了。

我用的 jcef

就登录客户端 wg 才是,主端就不是了

进去的客户端也是啊

你试试通过网页 url 都能访问

用 unity3d 啊, 跨平台, 性能也好

哟 老熟人嘛,余思成大佬 :)

可以考虑用 Flutter Desktop

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服