Javascript 为什么Electron会在每个窗口生成一个进程?

Javascript 为什么Electron会在每个窗口生成一个进程?,javascript,typescript,electron,Javascript,Typescript,Electron,我正在使用多个窗口开发electron应用程序。假设我有一个主窗口和几个子窗口 如果我在主进程中打开google.com创建20个子窗口,它会产生大约23个电子进程(每个窗口一个+GPU进程+其他进程),在我的windows 10机器上总共消耗大约800 MB内存。这显然是很多 const {app, BrowserWindow} = require('electron') let mainWindow const webPreferences = { sandbox: true };

我正在使用多个窗口开发electron应用程序。假设我有一个主窗口和几个子窗口

如果我在主进程中打开google.com创建20个子窗口,它会产生大约23个电子进程(每个窗口一个+GPU进程+其他进程),在我的windows 10机器上总共消耗大约800 MB内存。这显然是很多

const {app, BrowserWindow} = require('electron')

let mainWindow

const webPreferences = {
  sandbox: true
};

function createWindow () {
  mainWindow = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences
  })

  mainWindow.loadFile('index.html')

  for (var t = 0; t < 20; t++) {
    const childWindow = new BrowserWindow({
      webPreferences
    })

    childWindow.loadURL('https://google.com')
  }
}

app.on('ready', createWindow)
和index.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Hello World!</title>
  </head>
  <body>
    <h1>Hello World!</h1>
    <script>
        for (var t = 0; t < 20; t++) {
            window.open('https://google.com');
        }
    </script>
  </body>
</html>

你好,世界!
你好,世界!
对于(var t=0;t<20;t++){
打开窗户https://google.com');
}

如果我从主进程(第一个代码段)创建子窗口,是否有任何方法可以使所有子窗口都只有一个进程?如果有人能解释为什么它是这样工作的,那就太好了


另外,我正在使用electron fiddler和electron 6.0.2运行时来运行这些代码片段

亲和性
选项起作用。具有相同关联性的窗口将在单个进程中聚集在一起

有关此功能的更多详细信息,请参见此处

这里呢


出于同样的原因,Chrome会为每个选项卡生成一个新流程;Electron只是铬渲染引擎的包装。你在这里遇到的是一些人批评像Electron这样的平台的主要原因——通过web渲染引擎运行“本机”应用程序的巨大开销。请仔细阅读这个问题。我知道这是一个包装。问题是,如果我在主进程中创建一个窗口,为什么它会生成很多进程,但同时在浏览器进程中,每个窗口只生成一个进程。
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Hello World!</title>
  </head>
  <body>
    <h1>Hello World!</h1>
    <script>
        for (var t = 0; t < 20; t++) {
            window.open('https://google.com');
        }
    </script>
  </body>
</html>