• 请不要在回答技术问题时复制粘贴 AI 生成的内容
TomeWong
V2EX  ›  程序员

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

  •  
  •   TomeWong · Apr 21, 2020 · 5433 views
    This topic created in 2396 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

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

    Supplement 1  ·  Apr 22, 2020
    刚刚代码测试,发现 web woker 暂时不支持 fs 模块,这个问题就很尴尬了,想了很多中方法,最后发现这个最好实施的却没法实现。。。
    Supplement 2  ·  Apr 22, 2020

    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上看到的一个大佬的回复 参考

    18 replies  •  2020-11-23 14:52:34 +08:00
    Virace
    Virace
    Apr 21, 2020 via Android
    1
    难道是要所有文件一上传?
    Virace
    Virace
    Apr 21, 2020 via Android
    2
    @Virace 一起
    Jirajine
    Jirajine
    Apr 21, 2020 via Android
    3
    用 go 单独写一个服务跟随主进程一起启动,通过 IPC 交互,逻辑都用 go 实现。
    TomeWong
    TomeWong
    OP
    Apr 21, 2020
    4
    @Jirajine 不会用 go
    TomeWong
    TomeWong
    OP
    Apr 21, 2020
    5
    @Virace 并发上传,不是所有的文件一起上传,是有队列控制的
    xcstream
    xcstream
    Apr 21, 2020
    6
    Electron 有 node 进程
    whypool
    whypool
    Apr 21, 2020
    7
    首先,上传走的异步,除非 dom 爆了,也不至于卡 ui
    其次,看你描述应该是 js 内存爆了导致
    如果上传文件没啥限制直接用 formdata
    文件读写 node 有 stream,同步卡线程可以用异步流
    tojonozomi
    tojonozomi
    Apr 21, 2020
    8
    可以考虑 wasm,可以用很多语言,性能应该有原生的一半
    charten
    charten
    Apr 21, 2020❤️1
    9
    上传大量文件?是大文件还是大量文件?渲染进程 node 可以读流写流啊,这是 web 环境不具备的。基本上每个进程限制死 1g 内存的读写操作没啥问题的。electron 多进程,开多个窗口就是多进程了,可以嵌几个 iframe 进去
    maichael
    maichael
    Apr 21, 2020
    10
    node 开个子进程去跑不就好了吗。
    TomeWong
    TomeWong
    OP
    Apr 22, 2020
    11
    @charten 上传大量的文件,这些文件既包含小文件,也可能包含大文件,多进程还没有深入的看,我可以看下,谢谢
    TomeWong
    TomeWong
    OP
    Apr 22, 2020
    12
    @maichael 频繁通信也会有问题啊
    TomeWong
    TomeWong
    OP
    Apr 22, 2020
    13
    @whypool 是用的异步流
    TomeWong
    TomeWong
    OP
    Apr 22, 2020
    14
    @tojonozomi 暂时没有技术积累啊
    axeprpr1
    axeprpr1
    Apr 22, 2020
    15
    electron 可以用 node.js =>
    let win = new BrowserWindow({
    webPreferences: {
    nodeIntegrationInWorker: true
    }
    })
    或者用 webview 来处理,也不会卡 ui
    TomeWong
    TomeWong
    OP
    Apr 23, 2020
    16
    @axeprpr1 设置了
    agoodob
    agoodob
    Sep 26, 2020
    17
    请问最后怎么解决的呢?
    TomeWong
    TomeWong
    OP
    Nov 23, 2020
    18
    @agoodob 数据存储用的是 levelDB,页面渲染使用的是 vue-virtual-scroller
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4857 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 50ms · UTC 02:27 · PVG 10:27 · LAX 18:27 · JFK 21:27
    ♥ Do have faith in what you're doing.