Прежде чем я расскажу немного о себе, я хотел бы уточнить, что я не ищу, как просто создать новый скрипт в среде выполнения Electron в качестве процесса рендеринга, я пытаюсь использовать простую среду выполнения Node.
Итак, я знаю, что у Electron есть другая разновидность среды выполнения JS, похожая на NW.js, и я пытаюсь получить согласованные результаты производительности для своего отчета.
К сожалению, это оказалось намного сложнее, чем я предполагал. Я специально тестирую скорость модуля mailparser
, хотя здесь это не обязательно важно.
Сначала я запустил его в приложении Electron, с которым мы работаем, которое использует Electron Forge. Я вызвал тестовый сценарий через IPC, так как мы собираемся его использовать, поэтому он был вызван в обратном вызове для
ipcMain.handle
. Здесь производительность была действительно плохой, и для завершения нашего теста требовалось 30-50 секунд.Затем я запустил тестовый скрипт, который просто открывает пустой HTML-файл в том же приложении Electron Forge и запускает тестовый скрипт в фоновом режиме. Это было намного лучше на 8-12 секундах.
Затем я создал новый каталог с тестовым набором, простой установкой Electron и установкой mailparser
. Я не electron-rebuild
здесь, но mailparser
полагается на node-iconv
и поэтому имеет собственные привязки.
Я запустил тестовый сценарий, в котором Electron просто вызвал ту же строку кода. Это не использовало Electron Forge. Производительность здесь была немного лучше - 5-9 секунд.
Затем я запустил еще один тестовый сценарий, на этот раз только с обычным старым узлом, и производительность здесь была отличной на 1-3 с.
Итак, у меня есть два вопроса:
Почему производительность в тестах Electron так сильно различается? Хотя я использовал IPCMain, я использовал новый
.handle
, который должен быть асинхронным и запускаться в контексте среды выполнения узла Electron, поэтому он должен иметь такую же производительность, как и работа вне обратного вызова. Более того, тесты Electron Forge и обычные тесты Electron также различаются на пару секунд, что для меня не имело смысла, поскольку я предполагал, что Electron Forge просто закроет двоичную систему Electron под капотом.В поисках оптимальных и последовательных результатов мне интересно, как я могу развернуть дочерний процесс со средой выполнения узла внутри Electron. Обычно это просто запускает новый процесс рендеринга, который запускает (более медленную) среду выполнения JS Electron. Я бы не хотел покидать Electron Forge, но единственное решение, которое я могу придумать, - это связать предварительно скомпилированные двоичные файлы с процессом, работающим в среде выполнения Node, созданной для каждой платформы.