#javascript #node.js #express #electron
#javascript #node.js #экспресс #electron
Вопрос:
При загрузке моего главного окна путем передачи HTML-файла непосредственно через Electron все работает так, как ожидалось.
Приложение Electron:
mainWindow.loadURL(
url.format({
pathname: path.join(__dirname, "mainWindow.html"),
protocol: "file:",
slashes: true
})
);
Но при использовании Express и доступе к главному окну при localhost
первом запуске приложения Electron возникает большая задержка (белый экран), которая длится около 30 секунд.
Однако страница доступна localhost
в браузере, как только я запускаю electron .
Экспресс-приложение:
app.get("/", (req, res) => {
res.sendFile(path.join(__dirname, "mainWindow.html"));
});
app.listen(3000);
Приложение Electron:
mainWindow.loadURL("http://localhost:3000");
Я пробовал это с несколькими портами, и все они дают одинаковый результат.
Комментарии:
1. Первое, что нужно определить, это где находится задержка (задержки). Сравните время, когда вы запускаете приложение electron, со временем, когда ваш экспресс-сервер получает запрос.
2. @T.J.Crowder экспресс-сервер получает запрос мгновенно, и я могу сразу получить доступ к localhost через браузер, как я уже сказал. Но в electron мне приходится ждать ~ 30 секунд, пока он загрузится.
3. Нет, я имею в виду, когда вы запускаете приложение Electron, через какое время после этого экспресс-сервер получает запрос от Electron? Немедленно, но вы не видите результат в течение 30 секунд? Через 10 секунд вы видите результат через 20 секунд после этого? Не до конца 30 секунд, а затем результат появляется почти сразу?
4. @T.J.Crowder Запуск приложения Electron — 30 секунд —> Экспресс получает запрос — без задержки —> Экспресс отправляет ответ — без задержки —> Electron отображает страницу.
5. В более ранней версии были проблемы с обнаружением прокси, но я предполагал, что это было исправлено в 4,. Но, возможно, стоит все же попробовать это ->
app.commandLine.appendSwitch('auto-detect', 'false') app.commandLine.appendSwitch('no-proxy-server')
Ответ №1:
Браузеры иногда могут пытаться быть немного более умными, чем им нужно, прокси-серверы были обычным явлением на заре Интернета. И в компаниях, сотрудничающих с ними, они по-прежнему популярны. Но в большинстве случаев прокси-серверы могут обрабатываться ОС прозрачно, так почему браузеры все еще пытаются справиться с этим, я не уверен на 100%.
Но простое решение — сообщить встроенному Chromium не пытаться разрешить прокси-сервер.
app.commandLine.appendSwitch('auto-detect', 'false');
app.commandLine.appendSwitch('no-proxy-server')
Возможно, вам не понадобятся оба вышеуказанных переключателя.
Конечно, если ваше приложение работает в системе, которая использует прокси, могут возникнуть проблемы. Но у меня такое чувство, что даже тогда это вряд ли вызовет сбой, так как, надеюсь, ОС все равно справится с этим.
Также это может быть удобно следить за -> https://github.com/electron/electron/issues/13829