Electron BrowserView 渲染器进程与 WebView

rup*_*pps 6 webview chromium electron

我正在将 Electron 应用程序从传统的渲染器 + Webview 架构移植到使用BrowserView对象的架构。该应用程序使用一些在所有可用的监视器中BrowserWindows显示webview全屏。渲染器进程基本上保持index.html100 webview% 的大小。

我对渲染器进程和浏览器视图有点困惑。

使用新方法,我只需将preload脚本注入构造函数中BrowserView,而不在其BrowserWindow自身上加载任何页面:

browserViewOptions = {
    webPreferences: {
        preload: (__dirname + "/preload.js"),
        partition: "persist:ns",
        nodeIntegration: false,
        plugins: false
    }
};
Run Code Online (Sandbox Code Playgroud)
  1. 这是什么渲染进程?是传统的渲染过程吗webviews?或者BrowserViews有自己的渲染器进程吗?
    1. 如果是传统方式,在我也加载页面的情况下是否共享BrowserWindow
  2. 我不加载页面有BrowserWindow什么关系吗?我的意思是,如果我不加载页面BrowserWindow(只是创建窗口来附加一个页面BrowserView),是否还有另一个正在运行空页面的 Chromium 进程
    1. 如果是,如果我只对 感兴趣,可以防止这种情况吗BrowserView
  3. 如果我将内容保留在 上BrowserWindow并偶尔隐藏BrowserViews以显示它们,是否会出现“透支”问题?

pus*_*kin 1

这是什么渲染进程?

与 不同的是<webview>BrowserView不使用另一个渲染器进程。您可以通过观察运行一些基本代码时出现的进程数来验证这一点,如下所示:

const mainWindow = new BrowserWindow();
const view = new BrowserView();
view.webContents.loadFile("index.html");
mainWindow.setBrowserView(view);
Run Code Online (Sandbox Code Playgroud)

您不会获得额外的渲染器进程。

我不将页面加载到 BrowserWindow 中有什么关系吗?

具体有什么区别?渲染器进程的数量?不,事实并非如此。

是否有另一个 Chromium 进程正在运行一个空页面?如果是,如果我只对 BrowserView 感兴趣,可以防止这种情况吗?

您是否在询问空是否会导致BrowserWindow其中包含“about:blank”的冗余渲染器进程?它不会导致额外的过程,但是我相信窗口隐式导航到 about:blank。(不过,我对此可能是错的,因为mainWindow.webContents.getURL()logs ""。显式地将其导航到"about:blank"正确的logs "about:blank")。

你真的不需要阻止任何事情。

但是,我要补充一点,如果您的整个窗口要在BrowserView关闭节点集成的情况下加载单个窗口,据我所知,您不会从使用 a 中获得任何好处BrowserView,而应该执行以下操作:

const mainWindow = new BrowserWindow({
    webPreferences: {
        preload: (__dirname + "/preload.js"),
        partition: "persist:ns",
        nodeIntegration: false,
        plugins: false
    }
});
Run Code Online (Sandbox Code Playgroud)

如果我将内容保留在 BrowserWindow 上并偶尔隐藏 BrowserViews 以显示它们,是否会出现“透支”问题?

您可能需要澄清您的问题是什么,但是加载到 中的内容BrowserWindow将始终存在,并且在隐藏BrowserView.