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,有或没有旋转“隐藏渲染器”。
另见
-
[1] 在 Electron 中使用 Node 工作线程的陷阱:thread in #18540
我正在构建一个运行 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,有或没有旋转“隐藏渲染器”。
另见
[1] 在 Electron 中使用 Node 工作线程的陷阱:thread in #18540