Electron 的主线程会阻塞 BrowserWindow 吗?

Does Electron's main thread block BrowserWindow?

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

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

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

其次,Main 进程的主线程用于(当然还有其他事情)在 Main 进程和 BrowserWindow 使用的渲染器进程之间进行通信,因此如果您的主线程正在执行大型同步操作,您的主线程将阻塞,这肯定会影响您的 window.

的响应能力

what is the best way to separate them?

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

您可以考虑使用 WebWorkers。参见 here

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

显然[0],Electron 在后台很大程度上依赖于持续的主渲染器通信,这是您进行的显式 IPC 调用之外的补充。因此,如果主线程锁定某些操作,UI 会疯狂地滞后 即使您自己的 IPC 调用没有被阻塞.

解决方法:

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

  • 您可以使用 Web Worker,有或没有旋转“隐藏渲染器”。

另见