Electron — Почему при загрузке главного окна через localhost возникает большая задержка по сравнению с HTML-файлом?

#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