首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >电子一致的性能和旋转的子Node.js过程

电子一致的性能和旋转的子Node.js过程
EN

Stack Overflow用户
提问于 2020-08-13 07:18:40
回答 1查看 453关注 0票数 1

在给出一些背景信息之前,我想澄清的是,我并不想简单地在电子运行时下生成一个新脚本作为呈现程序进程,而是尝试使用一个普通的Node运行时。

因此,我知道电子在JS运行时中有一些与NW.js相似的不同风格,我正试图为我的报告获得一致的性能结果。

不幸的是,这似乎比我想象的要困难得多。我正在专门测试mailparser模块的速度,尽管这在这里不一定重要。

  1. 我首先在我们正在使用的电子应用上运行它,它使用电子锻造。我通过IPC调用了测试脚本,因为我们打算使用它,所以在ipcMain.handle的回调中调用了它。在这里,表现真的很糟糕,我们的测试需要30-50秒才能完成。
  2. 然后,我运行了一个测试脚本,它只在同一个电子Forge应用程序中打开一个空白HTML文件,并在后台运行测试脚本。在8-12秒时,情况要好得多。

接下来,我设置了一个带有测试集、普通电子安装和mailparser安装的新目录。这里我没有electron-rebuild,但是mailparser确实依赖于node-iconv,因此也有本机绑定。

  1. 我运行了一个测试脚本,电子调用了同一行代码。这不使用电子锻造。这里的表演在5-9秒时略好一些。
  2. 然后我运行了另一个测试脚本,这次只使用普通的老节点,这里的性能在1-3上非常出色。

我有两个问题要问:

  1. 为什么电子测试的性能变化如此之大?虽然我使用了IPCMain,但我使用了新的.handle,它应该是异步的,并且运行在电子节点运行时的上下文中,因此它应该具有与在回调之外运行相同的性能。此外,电子Forge和普通电子测试也相差几秒钟,这对我来说毫无意义,因为我假设电子Forge只是将电子二元包在罩下。
  2. 为了获得最优和一致的结果,我想知道如何在电子内部的节点运行时旋转一个子进程。这样做通常只是启动一个新的呈现程序进程,它正在运行电子的(较慢的) JS运行时。我想避免离开电子Forge,但我能想到的唯一解决方案是将预编译的二进制文件与为每个平台构建的Node运行时下运行的进程捆绑在一起。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-24 20:12:02

对于问题1,如果不能够在代码中复制问题,就很难知道问题是什么。您可以尝试为电子团队发布一个吉特布网站上的问题。他们更有可能知道答案,但他们也要求代码。

话虽如此,但要将一个只运行节点并将您从电子/电子Forge开销中解放出来的子进程旋转起来并不那么困难。最简单的方法是使用节点的分叉命令,但是告诉它使用主节点可执行文件而不是electron.exe。您可以将脚本交给它来运行,这样就不需要担心预编译的二进制文件了。

下面运行在主进程上的代码(和这里)将在同一个文件夹中运行一个名为server.js的脚本:

代码语言:javascript
复制
    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。如果它在用例中仍然运行缓慢,那么我认为可以使用节点的派生命令来创建一个完全独立的进程。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63390008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档