web worker 解决 Electron 渲染进程大量计算问题?

2020-04-21 16:26:19 +08:00
 TomeWong

最近尝试很多方法,来解决 electron 渲染进程上传大量文件的问题,也调研了一些。如下:

1 、手写 addon,使用 node-gyp 编译,奈何 c++不会啊,放弃

2 、将上传大量文件的处理逻辑移至主进程,但主进程进行大量的计算也需要阻塞,主进程阻塞会导致渲染进程交互 卡顿,甚至系统崩溃,也只好放弃。

3 、采用 web woker 来处理,electron 对应 web worker 没有集成远程的 node.js api,读取本地文件会有问题,这个需要如何处理,还在思考中。。。

4 、新建一个 hiden renderer 来处理,实际上就是新建一个隐藏的 Broswerwindow,这个可以如理读取本地文件,但设计到通信问题,也在搜索中?

各位大佬,如有思路,还请指点迷津,谢谢!!!

4293 次点击
所在节点    程序员
18 条回复
Virace
2020-04-21 16:42:12 +08:00
难道是要所有文件一上传?
Virace
2020-04-21 16:42:25 +08:00
@Virace 一起
Jirajine
2020-04-21 16:48:39 +08:00
用 go 单独写一个服务跟随主进程一起启动,通过 IPC 交互,逻辑都用 go 实现。
TomeWong
2020-04-21 16:53:52 +08:00
@Jirajine 不会用 go
TomeWong
2020-04-21 17:33:30 +08:00
@Virace 并发上传,不是所有的文件一起上传,是有队列控制的
xcstream
2020-04-21 18:06:08 +08:00
Electron 有 node 进程
whypool
2020-04-21 18:13:51 +08:00
首先,上传走的异步,除非 dom 爆了,也不至于卡 ui
其次,看你描述应该是 js 内存爆了导致
如果上传文件没啥限制直接用 formdata
文件读写 node 有 stream,同步卡线程可以用异步流
tojonozomi
2020-04-21 19:03:09 +08:00
可以考虑 wasm,可以用很多语言,性能应该有原生的一半
charten
2020-04-21 19:55:00 +08:00
上传大量文件?是大文件还是大量文件?渲染进程 node 可以读流写流啊,这是 web 环境不具备的。基本上每个进程限制死 1g 内存的读写操作没啥问题的。electron 多进程,开多个窗口就是多进程了,可以嵌几个 iframe 进去
maichael
2020-04-21 20:03:13 +08:00
node 开个子进程去跑不就好了吗。
TomeWong
2020-04-22 14:57:21 +08:00
@charten 上传大量的文件,这些文件既包含小文件,也可能包含大文件,多进程还没有深入的看,我可以看下,谢谢
TomeWong
2020-04-22 14:58:48 +08:00
@maichael 频繁通信也会有问题啊
TomeWong
2020-04-22 14:59:19 +08:00
@whypool 是用的异步流
TomeWong
2020-04-22 14:59:41 +08:00
@tojonozomi 暂时没有技术积累啊
axeprpr1
2020-04-22 23:33:20 +08:00
electron 可以用 node.js =>
let win = new BrowserWindow({
webPreferences: {
nodeIntegrationInWorker: true
}
})
或者用 webview 来处理,也不会卡 ui
TomeWong
2020-04-23 14:19:33 +08:00
@axeprpr1 设置了
agoodob
2020-09-26 22:49:10 +08:00
请问最后怎么解决的呢?
TomeWong
2020-11-23 14:52:34 +08:00
@agoodob 数据存储用的是 levelDB,页面渲染使用的是 vue-virtual-scroller

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

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

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

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

© 2021 V2EX