【发布时间】:2017-08-18 14:58:20
【问题描述】:
我在 linux 服务器上运行电子以进行网络抓取。目前我正在为每个任务运行新的电子命令。但它会导致高 CPU 使用率。现在考虑运行单个电子实例,并为每个任务创建新的 BrowserWindow。适应这种风格的代码库需要一些时间,所以我想先在这里问一下。它会影响 CPU 使用率吗?影响有多大?
【问题讨论】:
我在 linux 服务器上运行电子以进行网络抓取。目前我正在为每个任务运行新的电子命令。但它会导致高 CPU 使用率。现在考虑运行单个电子实例,并为每个任务创建新的 BrowserWindow。适应这种风格的代码库需要一些时间,所以我想先在这里问一下。它会影响 CPU 使用率吗?影响有多大?
【问题讨论】:
实际上不支持或测试使用默认配置运行多个主 nodejs 进程实例。您会发现将数据持久化到磁盘的任何功能要么无法正常工作,要么无法按预期工作(即 localstorage、indexeddb、会话等)。
https://github.com/electron/electron/issues/2493
您可以通过更改每个实例的数据目录来解决此问题,这样它们就不会互相践踏,但这可能会占用大量磁盘空间,并且您需要一种方法来跟踪所有这些数据目录。
具有多个渲染器的单个主进程几乎总是答案。
【讨论】:
基本上,创建一个新的 NodeJS 进程会导致重新解析您的应用程序的代码,这将极大地影响您的 CPU 使用率。只创建一个新的BrowserWindow 只会创建一个新的渲染器进程,这样效率更高。
如果您的应用程序已打包,例如使用electron-packager,然后创建一个新实例也会影响您的 CPU 使用率,就像创建另一个 NodeJS 进程一样,因为该打包(也称为编译)应用程序中有一个 NodeJS 副本,这足以运行您的代码,但仍然会影响CPU 使用率。
但决定取决于您如何使用服务器。如果您只运行 Electron 应用程序来执行您定义的任务,那么调整您的工作代码将没有任何好处,只有很低的好处。如果您想发布此应用程序和/或该服务器被其他一些任务使用,例如一个网络服务器,如果你调整你的代码,这将是一个真正的好处。
【讨论】: