gpt4 book ai didi

javascript - Electron - 一致的性能和启动子 Node.js 进程

转载 作者:行者123 更新时间:2023-12-03 12:24:00 26 4
gpt4 key购买 nike

在我提供一些背景知识之前,我想澄清一下,我不是在寻找如何在 Electron 运行时简单地生成一个新脚本作为渲染器进程,我正在尝试使用普通的 Node 运行时。
所以我知道 Electron 在它的引擎盖下有一些不同风格的 JS 运行时,类似于 NW.js,我正试图为我的报告获得一致的性能结果。
不幸的是,这似乎比我想象的要困难得多。我专门测试 mailparser 的速度模块虽然这在这里并不重要。

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

  • 接下来,我设置了一个新目录,其中包含一个测试集、一个普通的 Electron 安装和一个 mailparser。安装。我没有 electron-rebuild在这里,但是 mailparser确实依赖 node-iconv native 绑定(bind)也是如此。
  • 我用 Electron 运行了一个测试脚本,只调用了同一行代码。这没有使用 Electron Forge。这里的性能在 5-9 秒时稍好一些。
  • 然后我运行了另一个测试脚本,这次只使用普通的旧 Node ,这里的性能在 1-3 秒时非常出色。

  • 所以我在这里有两个问题:
  • 为什么 Electron 测试中的性能差异如此之大?虽然我使用了 IPCMain,但我使用了新的 .handle它应该是异步的并且在 Electron 的 Node 运行时上下文中运行,因此它应该具有与在回调之外运行相同的性能。此外,Electron Forge 和普通 Electron 测试也相差几秒钟,这对我来说毫无意义,因为我认为 Electron Forge 只会将 Electron 二进制文件包裹在引擎盖下。
  • 寻求最佳和一致的结果,我想知道如何使用 Electron 中的 Node 运行时启动子进程。这样做通常只会启动一个新的渲染器进程,该进程正在运行 Electron 的(较慢的)JS 运行时。我想避免离开 Electron Forge,但我能想到的唯一解决方案是将预编译的二进制文件与在为每个平台构建的 Node 运行时下运行的进程捆绑在一起。
  • 最佳答案

    对于问题 1,如果不能在代码中复制它,就很难知道问题出在哪里。您可以尝试发布 issue on the Github site对于 Electron 团队来说。他们更有可能知道答案,但他们也要求提供代码。
    话虽如此,启动一个正在运行 Node 的子进程并让您从 Electron/Electron Forge 开销中解放出来并不难。最简单的是使用 Node 的fork命令,但告诉它使用主 Node 可执行文件而不是 electron.exe。您只需将脚本交给它即可运行,因此您无需担心预编译的二进制文件。
    下面的代码(和 here )在主进程上运行将在同一文件夹中运行一个名为 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 与主 Electron 进程进行通信。它还可以使用从您通常的 package.json 安装的任何 npm 模块,因为该脚本可以与您的其他脚本位于同一文件夹中。因此,如果它有效,这是一个非常干净的解决方案。
    今天下午我写了一些代码来娱乐自己。 I’ve put this on Github .它使用mailparser解析 server.js中node.exe进程中的简单邮件.
    据我所知,这也与 Electron Forge 正确打包,包括正确的脚本。它不会打包 node 本身,所以要么需要安装在目标机器上,要么我认为你需要分发 node.exe。
    顺便说一句,你是否真的尝试过这种方法并不完全清楚,这是它运行缓慢的场景之一。仍然有一些开销,因为我们正在设置 IPC。如果它在您的用例中仍然运行缓慢,那么我认为可以使用 node 的 spawn 命令来创建一个完全独立的进程。

    关于javascript - Electron - 一致的性能和启动子 Node.js 进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63390008/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com