Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Electron-与HTML文件相比,通过localhost加载主窗口时为什么会有很大的延迟?_Javascript_Node.js_Express_Electron - Fatal编程技术网

Javascript Electron-与HTML文件相比,通过localhost加载主窗口时为什么会有很大的延迟?

Javascript Electron-与HTML文件相比,通过localhost加载主窗口时为什么会有很大的延迟?,javascript,node.js,express,electron,Javascript,Node.js,Express,Electron,当通过Electron直接传递HTML文件来加载我的主窗口时,一切正常 电子应用程序: mainWindow.loadURL( url.format({ pathname: path.join(__dirname, "mainWindow.html"), protocol: "file:", slashes: true }) ); mainWindow.loadURL("http://localhost:3000"); 但是当使用Express并通过loca

当通过Electron直接传递HTML文件来加载我的主窗口时,一切正常

电子应用程序:

mainWindow.loadURL(
  url.format({
    pathname: path.join(__dirname, "mainWindow.html"),
    protocol: "file:",
    slashes: true
  })
);
mainWindow.loadURL("http://localhost:3000");

但是当使用Express并通过
localhost
访问主窗口时,第一次启动Electron应用程序时会有一个很大的延迟(白色屏幕),持续约30秒

但是,只要我运行
electron,就可以通过浏览器中的
localhost
访问该页面。

快速应用程序:

app.get("/", (req, res) => {
  res.sendFile(path.join(__dirname, "mainWindow.html"));
});
app.listen(3000);
电子应用程序:

mainWindow.loadURL(
  url.format({
    pathname: path.join(__dirname, "mainWindow.html"),
    protocol: "file:",
    slashes: true
  })
);
mainWindow.loadURL("http://localhost:3000");

我用多个端口尝试过这一点,它们都给出了相同的结果。

浏览器有时也可以尝试比它们需要的更聪明一点,代理服务器在web早期很常见。在合作公司中,它们仍然很受欢迎。但是在大多数情况下,操作系统可以透明地处理代理服务器,所以为什么浏览器仍然试图处理这个问题,我不是100%确定

但简单的解决方法是告诉嵌入式Chromium不要尝试解决代理服务器的问题

app.commandLine.appendSwitch('auto-detect', 'false');
app.commandLine.appendSwitch('no-proxy-server')
您可能不需要上述两个开关

当然,如果您的应用程序运行在使用代理的系统上,则可能会出现问题。但我有一种感觉,即使在那时,它也不太可能导致ISSUE,因为希望操作系统无论如何都能处理这个问题


此外,这可能很方便,注意->

首先要确定的是延迟的位置。将您启动electron应用程序的时间与您的Express server收到请求的时间进行比较。@T.J.Crowder Express server会立即收到请求,正如我所说,我可以立即通过浏览器访问localhost。但在electron中,我必须等待30秒才能加载。不,我的意思是,当你启动electron应用程序时,Express服务器会在多长时间后收到electron的请求?马上,但30秒内你看不到结果?10秒后,你会看到20秒后的结果吗?直到将近30秒结束,结果几乎立即出现?@T.J.Crowder Start Electron app--30秒-->Express接收请求--no delay-->Express发送响应--no delay-->Electron显示页面。早期版本中存在代理检测问题,但我假设它是在4,,。但是仍然值得尝试这个->
app.commandLine.appendSwitch('auto-detect','false')app.commandLine.appendSwitch('no-proxy-server')