主要/渲染器进程的区别是从Chromium继承的(这里是Chromium 's architecture and the reasoning behind it). This is the architecture that Chrome uses for performance and stability reasons. Each webContents instance runs in it'自己进程的一个article(一个"renderer"进程) . 主进程(只能有其中一个)管理webContents实例等等 .
1 回答
主要/渲染器进程的区别是从Chromium继承的(这里是Chromium 's architecture and the reasoning behind it). This is the architecture that Chrome uses for performance and stability reasons. Each webContents instance runs in it'自己进程的一个article(一个"renderer"进程) . 主进程(只能有其中一个)管理webContents实例等等 .
关于两者之间的差异,有一个good discussion here .
有些API只能在一个进程或另一个进程中使用,这可以帮助您了解逻辑在哪里 . 例如,通知(使用HTML5界面但实现为本机通知)只能从渲染器进程创建 . Menu class只能在主进程中调用 . 阅读Electron模块的API文档,了解其中的内容 . 您可以使用IPC,remote module或electron-remote来协调两个进程(您使用的进程取决于您的用例) .
我会说这是一个“硬”分离 . 它们都是独立的过程,因此不共享任何资源或状态 . 对于我认为的大多数JS开发者来说,这是一种范式转变(至少对我而言) . 例如,如果我有一个有状态模块,我在主进程中设置了一些状态,然后我在渲染器中需要该模块,那个状态将不存在 . 它们是该模块的两个完全不同的实例 . 这样的共享状态在主进程中可能是最好的,然后使用上述方法之一在渲染器进程之间共享该状态 .
这是real life apps和some sample apps.的列表
Shawn Rakowski说得很好(在下面的评论中):“在主流程和特定于应用程序的代码中放置代码处理平台基础架构代码(即创建窗口,注册全局快捷方式等)可能是一个很好的规则(你的应用程序是什么)实际上是在渲染过程中 . “
您可以在Electron中使用许多方法,因为在渲染器过程中可以使用
fs
模块(以及所有node.js模块) .如果您只处理一个浏览器窗口实例而不进行CPU密集型解析,我会说在该渲染器流程实例中运行所有
fs
相关代码 . 这是最简单的方法 .如果您想要锁定UI,这意味着您可以在主处执行此操作(这将锁定您的所有渲染器!) . 所以我会调查像electron-remote之类的东西,或创建一个运行繁重的隐形浏览器窗口实例 .
这篇关于main and renderer processes的文章更深入地讨论了这些话题(披露:我写的那篇) .