Electron的主要线程是否阻止BrowserWindow?

时间:2018-05-10 02:22:30

标签: electron single-threaded

我正在构建一个运行Electron应用程序的应用程序。我所看到的是,当主线程忙于运行自己的操作时,BrowserWindow的线程将被阻塞(就像BrowserWindow本身运行javascript一样)。

这些共享线程是否相同?如果是这样,将它们分开的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

首先,它并不是Electron的主要线程。说它的节点线程更准确。

第二,主要流程'使用主线程(当然还有其他东西)来在BrowserWindow使用的主进程和渲染器进程之间进行通信,因此如果你的主线程正在执行大型同步操作,那么你的主线程会阻止,这肯定会影响你窗口的响应能力。

  

将它们分开的最佳方法是什么?

我无法提供一个在所有情况下都有用的通用解决方案。你应该提出一个具体的例子。你主要忙于做什么?

您可以查看使用WebWorkers。请参阅here

答案 1 :(得分:0)

简而言之,是的,Electron的主线程可以(有点违反直觉)“阻止”渲染器UI。

显然,[0],Electron在后台非常依赖于正在进行的主渲染器通信,这除了您进行的显式IPC调用外。因此,如果主线程锁定了某些操作,那么即使您自己的IPC调用未被阻止,UI也会像疯狂的那样滞后。

解决方法:

  • 您可以在main中使用Node worker threads [1]。

  • 您可以使用Web Worker,无论是否旋转“隐藏的渲染器”。

另请参见