Есть ли у Electron стандартный способ убить бесполезный процесс рендеринга? - PullRequest
0 голосов
/ 13 марта 2020

Мое приложение создает окно с локальной страницей, для которой требуется активация интеграции узлов.

После нажатия кнопки на этой странице я перехожу на стороннюю страницу.

Поскольку я хочу, чтобы узел был отключен на этой сторонней странице, и я не могу переключить интеграцию узлов в BrowserWindow, я загружаю эту стороннюю страницу в изолированную программную среду BrowserView, которая встроена в окно и растянута до по размеру всего экрана.

Теперь выполняется навигация по встроенному представлению, но BrowserWindow застрял, указывая на старую локальную страницу, которая больше не актуальна.

Чтобы эта дополнительная страница не отображалась сидя на заднем плане, я перемещаю свой BrowserWindow к "about:blank", чтобы эффективно очистить его и освобождаю место для BrowserView.

. Теперь я понимаю, что хотя это «очищает» старую страницу он поддерживает процесс визуализации, связанный с ним. С здесь :

Chromium создает процесс рендеринга для каждого экземпляра сайта, который пользователь посещает

И, понятно, переход к "about:blank" не не сигнализирую Electron о том, что он должен убить другой процесс.

Я хочу избавиться от этого процесса рендеринга, чтобы он не занимал лишнее время и не использовал ЦП и память при взаимодействии с окном.

Две вещи, которые сработали:

Я удалил дополнительную навигацию на "about:blank", так как теперь мы убиваем процесс, и:

1) Когда моя кнопка в моем рендерере отправляет сообщение основному процессу, говоря ему создать BrowserView и перейти на новый сайт, я делаю process.exit();. Я полагаю, что часть меня нервничает по поводу выхода процесса, мешающего сообщению, которое ставится в очередь для main, хотя, кажется, оно работает нормально.

2) Вместо того, чтобы убивать процесс из средства визуализации, я создал и переместился на мой BrowserView, а затем немного побежал browserWindow.webContents.executeJavascript("process.exit()");. Я нахожу это уродливее, хотя оно и смягчается из-за беспокойства, описанного выше в # 1.

Не существует типа webcontents.destroy(), и я не знаю, как сообщить Электрону, что ему нужно чтобы уничтожить этот ненужный процесс.

Полагаю, у меня может быть довольно уникальный случай, но есть ли более хороший (или более стандартный) способ обработки этого, чем явное выполнение process.exit()?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...