在给出一些背景信息之前,我想澄清的是,我并不想简单地在电子运行时下生成一个新脚本作为呈现程序进程,而是尝试使用一个普通的Node运行时。
因此,我知道电子在JS运行时中有一些与NW.js相似的不同风格,我正试图为我的报告获得一致的性能结果。
不幸的是,这似乎比我想象的要困难得多。我正在专门测试mailparser模块的速度,尽管这在这里不一定重要。
ipcMain.handle的回调中调用了它。在这里,表现真的很糟糕,我们的测试需要30-50秒才能完成。接下来,我设置了一个带有测试集、普通电子安装和mailparser安装的新目录。这里我没有electron-rebuild,但是mailparser确实依赖于node-iconv,因此也有本机绑定。
我有两个问题要问:
.handle,它应该是异步的,并且运行在电子节点运行时的上下文中,因此它应该具有与在回调之外运行相同的性能。此外,电子Forge和普通电子测试也相差几秒钟,这对我来说毫无意义,因为我假设电子Forge只是将电子二元包在罩下。发布于 2020-11-24 20:12:02
对于问题1,如果不能够在代码中复制问题,就很难知道问题是什么。您可以尝试为电子团队发布一个吉特布网站上的问题。他们更有可能知道答案,但他们也要求代码。
话虽如此,但要将一个只运行节点并将您从电子/电子Forge开销中解放出来的子进程旋转起来并不那么困难。最简单的方法是使用节点的分叉命令,但是告诉它使用主节点可执行文件而不是electron.exe。您可以将脚本交给它来运行,这样就不需要担心预编译的二进制文件了。
下面运行在主进程上的代码(和这里)将在同一个文件夹中运行一个名为server.js的脚本:
const serverPath = path.join(__dirname, 'server.js');
const { fork } = require('child_process');
child = fork(serverPath, [],
{
execPath: "node",
stdio: ['pipe', 'pipe', 'pipe', 'ipc']
});如果这样做,您将得到一个启用IPC的子node.exe进程,而不是electron.exe进程。它可以通过IPC与主电子进程进行通信。它还可以使用从通常的package.json安装的任何npm模块,因为脚本可以与其他脚本位于同一个文件夹中。因此,如果它有效,这是一个相当干净的解决方案。
今天下午,我通过编写一些代码来娱乐自己。我把这个放在吉特布身上了。它使用邮件解析器在node.exe进程中解析server.js中的简单邮件。
据我所见,在包含正确的脚本方面,这也正确地封装了电子Forge。它不会打包节点本身,所以要么需要安装在目标机器上,要么需要分发node.exe。
顺便说一句,还不完全清楚您是否真的尝试过这种方法,而且它是运行缓慢的场景之一。仍然有一些开销,因为我们正在设置IPC。如果它在用例中仍然运行缓慢,那么我认为可以使用节点的派生命令来创建一个完全独立的进程。
https://stackoverflow.com/questions/63390008
复制相似问题