Различие между рендерером и основными процессами в Electron

Первоначально я думал, что процесс рендеринга в Electron был изолирован песочницей в хромподобной среде, то есть все, что вы можете сделать, это беспорядок с DOM. Однако недавно я узнал, что вы можете получить доступ к файловой системе, запустить дочерние процессы и получить их вывод, а также импортировать любые другие node модули, которые вы хотите.

Если это так, что же такое различие между основным процессом и процессом рендеринга? Разве это не сложное разделение? Какой код входит в основной процесс и какой код входит в процесс рендеринга?

Если у кого-то есть хорошее углубленное чтение/презентация на архитектуре электронного приложения, мне тоже хотелось бы посмотреть на это; может помочь устранить некоторые путаницы

Ответы

Ответ 1

Различие между основным и визуализирующим процессом на самом деле не является концепцией электрона как таковой - оно унаследовано от Chromium (здесь

Здесь о различиях между ними.

Некоторые API-интерфейсы доступны только в одном процессе или в другом, что может помочь вам понять, в чем логика идет. Например, уведомления (использует интерфейс HTML5, но реализуются как собственные уведомления) могут быть созданы только из процесса рендеринга. можно вызывать только из основного процесса. Прочтите документы API электронных модулей и посмотрите, что там происходит. Вы можете использовать , модуль, или для координации между двумя процессами (который вы используете, зависит от вашего варианта использования).

Я бы сказал, что это "трудное" разделение. Все они являются отдельными процессами и, следовательно, не разделяют никаких ресурсов или состояний. Я считаю, что это парадигма для большинства разработчиков JS (по крайней мере, это было для меня). Например, если у меня был модуль с состоянием, в котором я установил какое-то состояние в основном процессе, а затем мне нужен этот модуль в рендерере, этого состояния не будет. Это два совершенно разных экземпляра этого модуля. Такое состояние доступа, вероятно, будет лучше всего в основном процессе, а затем либо использовать один из описанных выше способов для совместного использования этого состояния между процессами рендеринга.

Вот список и

Шон Раковски сказал это хорошо (в комментариях ниже): "Это может быть хорошим правилом, чтобы поставить код, связанный с кодом инфраструктуры платформы (т.е. создавать окна, регистрировать глобальные ярлыки и т.д.) в основном процессе и конкретном коде приложения ( что ваше приложение действительно делает) в процессах Renderer."

[Мое приложение работает] анализирует некоторые файлы, а затем отображает информацию на экране

В Electron есть много подходов, потому что модуль fs (и все модули node.js) доступны вам в процессе рендеринга.

Если вы используете только один экземпляр окна браузера и не выполняете интенсивный синтаксический анализ ЦП, я бы сказал, запустите весь связанный с ним код fs в экземпляре процесса визуализации. Это самый простой способ.

Если вы выполняете интенсивную работу с ЦП над этими файлами, вы не хотите блокировать пользовательский интерфейс, что означает, что вы не можете сделать свой обработчик окон браузера обработки, и вы не можете сделать это в основном ( это заблокирует все ваши средства визуализации!). Поэтому я бы рассмотрел нечто вроде или создал невидимый экземпляр окна браузера, который запускает тяжелый подъем.

В этой статье, посвященной , более подробно рассказывается об этих темах (раскрытие: я написал это).