最近尝试很多方法,来解决 electron 渲染进程上传大量文件的问题,也调研了一些。如下:
1 、手写 addon,使用 node-gyp 编译,奈何 c++不会啊,放弃
2 、将上传大量文件的处理逻辑移至主进程,但主进程进行大量的计算也需要阻塞,主进程阻塞会导致渲染进程交互 卡顿,甚至系统崩溃,也只好放弃。
3 、采用 web woker 来处理,electron 对应 web worker 没有集成远程的 node.js api,读取本地文件会有问题,这个需要如何处理,还在思考中。。。
4 、新建一个 hiden renderer 来处理,实际上就是新建一个隐藏的 Broswerwindow,这个可以如理读取本地文件,但设计到通信问题,也在搜索中?
各位大佬,如有思路,还请指点迷津,谢谢!!!
if you’re using a hidden renderer you can use the NodeJS fs module to access local files. This doesn’t work with web workers as they don’t support NodeJS integration.
这个是在medium上看到的一个大佬的回复 参考
1
Virace 2020-04-21 16:42:12 +08:00 via Android
难道是要所有文件一上传?
|
3
Jirajine 2020-04-21 16:48:39 +08:00 via Android
用 go 单独写一个服务跟随主进程一起启动,通过 IPC 交互,逻辑都用 go 实现。
|
6
xcstream 2020-04-21 18:06:08 +08:00
Electron 有 node 进程
|
7
whypool 2020-04-21 18:13:51 +08:00
首先,上传走的异步,除非 dom 爆了,也不至于卡 ui
其次,看你描述应该是 js 内存爆了导致 如果上传文件没啥限制直接用 formdata 文件读写 node 有 stream,同步卡线程可以用异步流 |
8
tojonozomi 2020-04-21 19:03:09 +08:00
可以考虑 wasm,可以用很多语言,性能应该有原生的一半
|
9
charten 2020-04-21 19:55:00 +08:00 1
上传大量文件?是大文件还是大量文件?渲染进程 node 可以读流写流啊,这是 web 环境不具备的。基本上每个进程限制死 1g 内存的读写操作没啥问题的。electron 多进程,开多个窗口就是多进程了,可以嵌几个 iframe 进去
|
10
maichael 2020-04-21 20:03:13 +08:00
node 开个子进程去跑不就好了吗。
|
14
TomeWong OP @tojonozomi 暂时没有技术积累啊
|
15
axeprpr1 2020-04-22 23:33:20 +08:00
electron 可以用 node.js =>
let win = new BrowserWindow({ webPreferences: { nodeIntegrationInWorker: true } }) 或者用 webview 来处理,也不会卡 ui |
17
agoodob 2020-09-26 22:49:10 +08:00
请问最后怎么解决的呢?
|