我正在构建一个运行Electron应用程序的应用程序。我所看到的是,当主线程忙于运行自己的操作时,BrowserWindow的线程将被阻塞(就像BrowserWindow本身运行javascript一样)。
这些共享线程是否相同?如果是这样,将它们分开的最佳方法是什么?
答案 0 :(得分:1)
首先,它并不是Electron的主要线程。说它的节点线程更准确。
第二,主要流程'使用主线程(当然还有其他东西)来在BrowserWindow
使用的主进程和渲染器进程之间进行通信,因此如果你的主线程正在执行大型同步操作,那么你的主线程会阻止,这肯定会影响你窗口的响应能力。
将它们分开的最佳方法是什么?
我无法提供一个在所有情况下都有用的通用解决方案。你应该提出一个具体的例子。你主要忙于做什么?
您可以查看使用WebWorkers。请参阅here。
答案 1 :(得分:0)
简而言之,是的,Electron的主线程可以(有点违反直觉)“阻止”渲染器UI。
显然,[0],Electron在后台非常依赖于正在进行的主渲染器通信,这除了您进行的显式IPC调用外。因此,如果主线程锁定了某些操作,那么即使您自己的IPC调用未被阻止,UI也会像疯狂的那样滞后。
解决方法:
您可以在main中使用Node worker threads [1]。
您可以使用Web Worker,无论是否旋转“隐藏的渲染器”。
[1]了解在Electron中使用节点工作线程的问题:thread in #18540