Основной поток Electron блокирует BrowserWindow?
Я создаю приложение, которое запускает приложение Electron. То, что я вижу, это то, что, когда основной поток начинает выполнять свои собственные операции, поток BrowserWindow блокируется (так же, как это происходит, если в самом BrowserWindow работает javascript).
Они разделяют одну и ту же тему? Если да, то как лучше всего их разделить?
1 ответ
Прежде всего, это не главная тема Electron. Правильнее было бы сказать, что это нода Node.
Во-вторых, основной поток основного процесса используется (помимо прочего, конечно) для связи между основным процессом и процессом визуализации, который используется BrowserWindow
, так что если ваш основной поток выполняет большую синхронную операцию, ваш основной поток будет блокироваться, и это, безусловно, может повлиять на отзывчивость вашего окна.
Каков наилучший способ их разделения?
Я не могу дать общее решение, которое будет полезно во всех случаях. Вы должны представить конкретный пример. Чем занят ваш основной поток?
Вы можете изучить использование WebWorkers. Смотрите здесь.
Короче говоря, да, основной поток Electron может (что несколько противоречит интуиции) "блокировать" пользовательский интерфейс рендерера.
По-видимому [0], Electron в значительной степени полагается на текущую связь основного рендерера в фоновом режиме, и это в дополнение к явным вызовам IPC, которые вы делаете. Таким образом, если основной поток блокирует некоторые операции, пользовательский интерфейс будет как сумасшедший, даже если ваши собственные вызовы IPC не заблокированы.
Способы обойти это:
Вы можете использовать рабочие потоки Node[1] в main.
Вы можете использовать Web Workers с вращающимися "скрытыми модулями визуализации" или без них.
Смотрите также
[1] Подсказки по использованию рабочих потоков Node в Electron: поток в #18540