Electron:为啥 BrowserView 的性能比 Webview 好?

Posted

技术标签:

【中文标题】Electron:为啥 BrowserView 的性能比 Webview 好?【英文标题】:Electron: Why does BrowserView has better performance then Webview?Electron:为什么 BrowserView 的性能比 Webview 好? 【发布时间】:2021-06-04 05:02:16 【问题描述】:

我已经阅读过有关 Webview 和 BrowserView 的信息,它们似乎在做同样的事情:将额外的 Web 内容嵌入到应用程序中。我知道 Electron 的 webview 标签基于 Chromium 的 webview,并且这个 API 是已弃用的 Chrome Apps 平台的一部分。甚至 Electron 也建议不要使用 Webview 并考虑替代方案(iframe、BrowserView)。

但是是什么改变让 BrowserView 更胜一筹呢?我知道与 Webview 不同,BrowserView 不使用另一个渲染器进程,这就是为什么 BrowserView 具有更好的性能?其他指标是什么? BrowserView 与 Webview 内部有何不同?

【问题讨论】:

【参考方案1】:

这绝不是一个完整的答案,但BrowserView 是由于webview 遇到的各种问题而创建的。

Here's 创建者的博文:

一种嵌入 Web 应用程序的新方法,错误更少并提高了性能 webviews 起初似乎运行良好,但随着时间的推移,我们遇到了越来越多的问题。拖放等基本功能存在错误,总体性能根本无法与 Chrome 相提并论。

Electron 的 webview documentation 说:

Electron 的 webview 标签基于 Chromium 的 webview,它正在经历巨大的架构变化。这会影响 webview 的稳定性,包括渲染、导航和事件路由。

过去有很多webviewbugs,尽管这些特定的似乎已修复。

Here's 一个关于BrowserView 命运的问题,维护者说:

<webview> 仍然存在许多错误。还有一些架构问题,例如缓慢的自动调整大小,不太可能很快在 Chromium 中得到解决

Here 是许多 webview 错误(尽管您当然也可以通过 BrowserView 找到错误)

另外,你说:

BrowserView 不使用另一个渲染器进程

我相信我在某处也看到了对它的引用,但我认为那不是真的。

当您将BrowserView 导航到页面时,会为其创建一个新的渲染器进程。

更新:哦,我认为这里的意思是 webview == 1 进程和 BrowserView == 1 进程,但是您在另一个 Renderer 进程内创建 webview,而在主进程内创建 BrowserView。所以webview会有一个额外的过程。

【讨论】:

以上是关于Electron:为啥 BrowserView 的性能比 Webview 好?的主要内容,如果未能解决你的问题,请参考以下文章

electron 在windows下窗口为啥不能拖动

为啥 Electron 需要保存为开发者依赖?

为啥 Electron 页面不直接加载 JQuery? [复制]

为啥我的 ipcMain 没有发送到 Electron 中的 ipcRenderer?

为啥我不能设置 Jquery 的属性并在 Electron 中得到未定义的答案

为啥 electron-osx-sign 无法生成 Gatekeeper 识别的签名应用程序?