Javascript 电子一致性性能和旋转子Node.js进程
在我介绍一些背景知识之前,我想澄清一下,我并不是在寻找如何在Electron运行时下简单地生成一个新脚本作为渲染器进程,而是尝试使用普通节点运行时 所以我知道Electron在它的引擎盖下有一些不同的JS运行时风格,类似于NW.JS,我正在尝试为我的报告获得一致的性能结果 不幸的是,这似乎比我想象的要困难得多。我专门测试Javascript 电子一致性性能和旋转子Node.js进程,javascript,node.js,performance,electron,electron-forge,Javascript,Node.js,Performance,Electron,Electron Forge,在我介绍一些背景知识之前,我想澄清一下,我并不是在寻找如何在Electron运行时下简单地生成一个新脚本作为渲染器进程,而是尝试使用普通节点运行时 所以我知道Electron在它的引擎盖下有一些不同的JS运行时风格,类似于NW.JS,我正在尝试为我的报告获得一致的性能结果 不幸的是,这似乎比我想象的要困难得多。我专门测试mailparser模块的速度,尽管这在这里并不重要 我首先在我们正在使用的Electron应用程序上运行它,它使用Electron Forge。我通过IPC调用了测试脚本,因为
mailparser
模块的速度,尽管这在这里并不重要
ipcMain.handle
的回调中调用的。在这里,性能非常差,我们的测试需要30-50秒才能完成
mailparser
安装设置了一个新目录。我没有在这里electron-rebuild
,但是mailparser
确实依赖于node-iconv
,因此具有本机绑定
.handle
,它应该是异步的,并在Electron的节点运行时上下文中运行,因此它应该具有与在回调外部运行相同的性能。此外,Electron Forge和plain Electron测试也相差几秒钟,这对我来说毫无意义,因为我假设Electron Forge只是将电子二进制文件包在引擎盖下
对于问题1,如果不能够在代码中复制它,就很难知道问题是什么。你可以试着为Electron团队发布一个关于这个的帖子。他们更可能知道答案,但他们也要求代码 话虽如此,启动一个子进程并不难,它只是运行node并将您从电子/电子锻造开销中解放出来。最简单的方法是使用node的命令,但告诉它使用主节点可执行文件而不是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模块,因为脚本可以与其他脚本位于同一文件夹中。因此,如果它起作用,这是一个相当干净的解决方案
今天下午,我写了一些代码,以此来娱乐自己。它使用mailparser在中的node.exe进程中解析简单邮件
就我所见,这也正确地打包了Electron Forge,包括正确的脚本。它不会打包节点本身,因此需要将其安装在目标计算机上,或者我认为您需要分发node.exe
顺便说一句,目前还不完全清楚您是否真的尝试过这种方法,这是一种运行缓慢的场景。还有一些开销,因为我们正在设置IPC。如果它在您的用例中仍然运行缓慢,那么我认为可以使用node的spawn命令创建一个完全独立的进程