跳至主要内容

Google Summer of Code 2022

·阅读时间:2 分钟

Electron 团队很高兴地宣布,我们今年将首次参加 Google Summer of Code!


什么是 Google Summer of Code?

Google Summer of Code (GSoC) 是一项年度指导计划,将开源软件项目与潜在贡献者联系起来。以前仅对学生开放,现在 18 岁及以上的人都可以注册参加 GSoC。

有关更多信息,请查看 Summer of Code 主页

如何注册?

您有兴趣与 Electron 合作吗?如果您是开源的新手或入门级贡献者,我们欢迎您申请!

为了被选为 Google Summer of Code 的 Electron 贡献者,您需要提交申请。申请将于 **2022 年 4 月 4 日** 开始,并于 **2022 年 4 月 19 日** 结束。 您可以在此处关注 Google:Summer of Code 申请指南的更新

想要申请?首先,查看我们准备好的 五个项目想法草案。所有列出的想法目前都对提案开放。我们也乐于接受未在提议的项目列表中的新想法。

您的申请应包括

  • 您的提案,这是一份书面文件,详细描述您计划在整个夏季实现的目标。
  • 您作为开发人员的背景。如果您有简历,请附上副本,否则请告诉我们您过去的经验,重点关注相关的技术经验。

此处提供了有关作为 Electron 申请的一部分提交哪些内容的详细指南。

您还可以阅读 官方 GSoC 学生/贡献者指南,以获取有关准备提案的重要提示。

如果您想讨论项目提案或有任何疑问,请加入我们的 #gsoc-general Discord 频道

参考文献

Electron 17.0.0

·阅读时间:3 分钟

Electron 17.0.0 现已发布!它包含对 Chromium 98、V8 9.8 和 Node.js 16.13.0 的升级。请阅读以下内容以了解更多详细信息!


Electron 团队很高兴地宣布发布 Electron 17.0.0!您可以通过 npm install electron@latest 使用 npm 安装它,或从我们的 发布网站 下载它。继续阅读以了解有关此版本的详细信息,并请分享您有任何反馈!

重大变化

Electron 发布节奏更改

从 Electron 15 开始,Electron 将每 8 周发布一个新的主要稳定版本。您可以在 此处阅读完整详细信息

此外,Electron 已将支持的版本从最新的三个版本更改为最新的四个版本,直到 2022 年 5 月。 请参阅我们的版本控制文档,以获取有关 Electron 中版本控制的更多详细信息。2022 年 5 月之后,我们将恢复支持最新的三个版本。

堆栈更改

突出显示的功能

  • 添加了 webContents.getMediaSourceId(),可与 getUserMedia 一起使用以获取 WebContents 的流。 #31204
  • 弃用 webContents.getPrinters() 并引入 webContents.getPrintersAsync()#31023
  • desktopCapturer.getSources 现在仅在主进程中可用。 #30720

请参阅 17.0.0 发行说明,以获取新功能和更改的完整列表。

重大更改

以下是 Electron 17 中引入的重大更改。有关这些更改和未来更改的更多信息,请参阅 计划中的重大更改 页面。

渲染器中的 desktopCapturer.getSources

desktopCapturer.getSources API 现在仅在主进程中可用。更改此设置是为了提高 Electron 应用程序的默认安全性。

API 更改

Electron 17 中没有 API 更改。

已移除/弃用的更改

  • 已移除渲染器中 desktopCapturer.getSources API 的用法。请参阅 此处,了解如何在您的应用程序中替换此 API 的详细信息。

13.x.y 的支持结束

根据项目的 支持策略,Electron 13.x.y 已达到支持结束。鼓励开发人员和应用程序升级到更新版本的 Electron。

从 Electron 15 开始,我们已将支持的版本从最新的三个版本更改为最新的四个版本,此更改持续到 2022 年 5 月的 Electron 19 版本。Electron 19 版本之后,我们将恢复支持最新的三个版本。此版本支持更改是我们新的发布节奏更改的一部分。请参阅 我们的博文以获取完整详细信息

E15 (2021 年 9 月)E16 (2021 年 11 月)E17 (2022 年 2 月)E18 (2022 年 3 月)E19 (2022 年 5 月)
15.x.y16.x.y17.x.y18.x.y19.x.y
14.x.y15.x.y16.x.y17.x.y18.x.y
13.x.y14.x.y15.x.y16.x.y17.x.y
12.x.y13.x.y14.x.y15.x.y--

后续计划

短期内,您可以预期团队将继续专注于跟上构成 Electron 的主要组件(包括 Chromium、Node 和 V8)的开发。尽管我们谨慎地不对发布日期做出承诺,但我们的计划是大约每两个月发布 Electron 的新主要版本,其中包含这些组件的新版本。

您可以在 此处找到 Electron 的公开时间线

有关未来更改的更多信息,请参阅 计划中的重大更改 页面。

Spectron 弃用通知

·阅读时间:2 分钟

Spectron 将于 2022 年 2 月 1 日停止使用。


从 2022 年 2 月开始,Spectron 将 由 Electron 团队正式弃用

为什么要弃用 Spectron?

虽然 Spectron 一直为每个新版本的 Electron 发布新版本,但该项目一年多来几乎没有进行维护和改进,并且目前没有全职维护人员。随着远程模块在 Electron 14 中从 Electron 核心转移到外部模块,Spectron 将需要进行重大重写才能继续可靠地工作。

在审查了 Spectron 持续维护的几个可用选项后,Electron 团队已决定在 2022 年弃用 Spectron。

弃用时间表

以下是我们计划的弃用时间表

  • 2021 年 11 月 - 2022 年 1 月:Electron 团队将继续接受来自社区的拉取请求。
  • 2022 年 1 月:将发布有关 Spectron 弃用的最终版本公告。
  • 2022 年 2 月 1 日:Spectron 的存储库将被标记为“已存档”。不再接受拉取请求。

2022 年 2 月 1 日之后,Electron 将继续无限期地保留 Spectron 存储库,以便其他人可以随意为其项目派生或使用现有代码。我们希望这将有助于为可能仍然依赖 Spectron 的任何项目提供更长的过渡期。

Spectron 的替代方案

如果您目前在项目中使用 Spectron,并且希望迁移到其他测试解决方案,您可以阅读 此处提供的自动化测试指南

我们目前还有几个推荐的 Spectron 替代方案,包括 Playwright 和 WebDriverIO。每个选项的官方教程都可以在我们的自动化测试文档中找到。

后续计划

Electron 团队感谢您使用 Spectron 和 Electron。我们了解你们中的许多人依赖 Spectron 来测试你们的应用程序,我们希望使这个过渡过程尽可能顺利。感谢您选择 Electron!

Electron 16.0.0

·阅读时间:4 分钟

Electron 16.0.0 已发布!它包含对 Chromium 96、V8 9.6 和 Node.js 16.9.1 的升级。请阅读以下内容以了解更多详细信息!


Electron 团队很高兴地宣布 Electron 16.0.0 发布!您可以通过 npm install electron@latest 使用 npm 安装它,或从我们的 发布网站 下载它。继续阅读以了解有关此版本的详细信息,并请分享您的任何反馈!

重大变化

Electron 发布节奏更改

从 Electron 15 开始,Electron 将每 8 周发布一个新的主要稳定版本。您可以在 此处阅读完整详细信息

此外,Electron 已将支持的版本从最新的三个版本更改为最新的四个版本,直到 2022 年 5 月。 请参阅我们的版本控制文档,以获取有关 Electron 中版本控制的更多详细信息。2022 年 5 月之后,我们将恢复支持最新的三个版本。

堆栈更改

突出显示的功能

  • 现在支持 WebHID API。 #30213
  • 将 data 参数添加到 app.requestSingleInstanceLock 以在实例之间共享数据。 #30891
  • 将 securityOrigin 传递到媒体权限请求处理程序。 #31357
  • 添加 commandLine.removeSwitch#30933

请参阅 16.0.0 版本说明 以获取新功能和更改的完整列表。

重大更改

以下是 Electron 16 中引入的重大更改。有关这些更改和未来更改的更多信息,请参阅 计划中的重大更改 页面。

构建原生模块

如果您的项目使用 node-gyp 构建原生模块,则可能需要使用 --force-process-config 调用它,具体取决于项目的设置和 Electron 版本。有关此更改的更多信息,请参阅 #2497

行为更改:crashReporter 实现切换到 Linux 上的 Crashpad

Linux 上 crashReporter API 的底层实现已从 Breakpad 更改为 Crashpad,使其与 Windows 和 Mac 保持一致。因此,子进程现在会自动监控,并且不再需要(也不建议)在 Node 子进程中调用 process.crashReporter.start(因为它将启动 Crashpad 报告程序的第二个实例)。

注释在 Linux 上的报告方式也有一些细微的变化,包括长值将不再拆分为附加有 __1__2 等等的注释,而是将在(新的、更长的)注释值限制处截断。

API 更改

Electron 16 中没有 API 更改。

已移除/弃用的更改

  • 渲染器中 desktopCapturer.getSources API 的使用已弃用,并将被删除。此更改提高了 Electron 应用程序的默认安全性。有关如何在应用程序中替换此 API 的详细信息,请参阅 此处

12.x.y 版本的支持结束

根据项目的 支持策略,Electron 12.x.y 已达到支持结束。鼓励开发人员和应用程序升级到更新版本的 Electron。

从 Electron 15 开始,我们已将支持的版本从最新的三个版本更改为最新的四个版本,此更改持续到 2022 年 5 月的 Electron 19 版本。Electron 19 版本之后,我们将恢复支持最新的三个版本。此版本支持更改是我们新的发布节奏更改的一部分。请参阅 我们的博文以获取完整详细信息

E15 (2021 年 9 月)E16 (2021 年 11 月)E17 (2022 年 2 月)E18 (2022 年 3 月)E19 (2022 年 5 月)
15.x.y16.x.y17.x.y18.x.y19.x.y
14.x.y15.x.y16.x.y17.x.y18.x.y
13.x.y14.x.y15.x.y16.x.y17.x.y
12.x.y13.x.y14.x.y15.x.y--

后续计划

短期内,您可以预期团队将继续专注于跟上构成 Electron 的主要组件(包括 Chromium、Node 和 V8)的开发。尽管我们谨慎地不对发布日期做出承诺,但我们的计划是大约每两个月发布 Electron 的新主要版本,其中包含这些组件的新版本。

您可以在 此处找到 Electron 的公开时间线

有关未来更改的更多信息,请参阅 计划中的重大更改 页面。

寂静之地 (2021 年 12 月)

·阅读时间:2 分钟

Electron 项目将在 2021 年 12 月暂停一个月,然后在 2022 年 1 月恢复全速运行。

via GIPHY


12 月份哪些方面将保持不变

  1. 将根据需要发布零日和其他与安全相关的重大版本。安全事件应通过 SECURITY.md 报告。
  2. 行为准则 报告和审核将继续进行。

12 月份哪些方面将有所不同

  1. 12 月份不发布新的 Beta 版或稳定版。12 月份最后两周不发布 Nightly 版。
  2. 除少数例外情况外,不进行拉取请求审查或合并。
  3. 任何存储库都不更新问题跟踪器。
  4. 维护人员不会在 Discord 上提供调试帮助。
  5. 不更新社交媒体内容。

为什么会这样?

简而言之,虽然维护人员对该项目感到高兴并积极参与,但世界很疲惫。12 月份对大多数公司来说都是一个较为平静的月份,因此我们希望给我们的维护人员一个机会来充电。我们鼓励其他项目考虑类似的措施。

我是否应该担心 Electron 的未来?

不,我们能够采取这一步骤是因为该项目状况良好。每个人都期待着 2022 年,我们预计会有好事发生!

Electron 15.0.0

·阅读时间:4 分钟

Electron 15.0.0 已发布!它包含对 Chromium 94、V8 9.4 和 Node.js 16.5.0 的升级。我们添加了对 window.open 的 API 更新、错误修复和一般改进。请阅读以下内容以了解更多详细信息!


Electron 团队很高兴地宣布 Electron 15.0.0 发布!您可以通过 npm install electron@latest 使用 npm 安装它,或从我们的 发布网站 下载它。继续阅读以了解有关此版本的详细信息,并请分享您的任何反馈!

重大变化

Electron 发布节奏更改

从 Electron 15 开始,Electron 将每 8 周发布一个新的主要稳定版本。您可以在 此处阅读完整详细信息

此外,Electron 将把支持的版本从最新的三个版本更改为最新的四个版本,直到 2022 年 5 月。 请参阅我们的版本控制文档以获取有关 Electron 中版本控制的更多详细信息。

堆栈更改

重点功能

  • nativeWindowOpen: true 现在不再是实验性功能,并且已成为默认设置。
  • 添加了 safeStorage 字符串加密 API。 #30430
  • WebContents 添加了“frame-created”事件,该事件在页面中创建框架时发出。 #30801
  • BrowserWindowwill-resize 事件添加了调整大小的 edge 信息。 #29199

请参阅 15.0.0 版本说明 以获取新功能和更改的完整列表。

重大更改

以下是 Electron 15 中引入的重大更改。有关这些更改和未来更改的更多信息,请访问 计划中的重大更改 页面。

默认值更改:nativeWindowOpen 默认为 true

在 Electron 15 之前,window.open 默认使用 BrowserWindowProxy 进行模拟。这意味着 window.open('about:blank') 无法用于打开可同步脚本化的子窗口,以及其他不兼容性。nativeWindowOpen: true 现在不再是实验性的,并且现在是默认值。

有关更多详细信息,请参阅 Electron 中 window.open 的文档。

API 更改

  • WebContents 添加了“frame-created”事件,该事件在页面中创建框架时发出。 #30801
  • 添加了 safeStorage 字符串加密 API。 #30430
  • dialog.showMessageBox 添加了 signal 选项。 #26102
  • 添加了一个 Electron Fuse,用于在应用程序加载的 app.asar 文件上强制执行代码签名。需要最新的 asar 模块(v3.1.0 或更高版本)。 #30900
  • 添加了保险丝以禁用打包应用程序中的 NODE_OPTIONS--inspect 调试参数。 #30420
  • 添加了新的 MenuItem.userAccelerator 属性以读取用户分配的 macOS 加速器覆盖。 #26682
  • 添加了新的 app.runningUnderARM64Translation 属性以检测在 Apple Silicon 上运行 Rosetta 或在 ARM 上运行 Windows 的 WOW 时的情况。 #29168
  • 添加了新的 imageAnimationPolicy 网页首选项来控制图像的动画方式。 #29095
  • 添加了通过上下文桥发送 Blob 的支持。 #29247

已移除/弃用的更改

没有 API 被移除或弃用。

支持的版本

从 Electron 15 开始,我们将支持的版本从最新的三个版本更改为最新的四个版本,直到 2022 年 5 月发布 Electron 19。Electron 19 之后,我们将恢复支持最新的三个版本。此版本支持更改是我们新的节奏更改的一部分。请参阅 此处我们的博文以获取完整详细信息

鼓励开发人员和应用程序升级到 Electron 的更新版本。

E15 (2021 年 9 月)E16 (2021 年 11 月)E17 (2022 年 2 月)E18 (2022 年 3 月)E19 (2022 年 5 月)
15.x.y16.x.y17.x.y18.x.y19.x.y
14.x.y15.x.y16.x.y17.x.y18.x.y
13.x.y14.x.y15.x.y16.x.y17.x.y
12.x.y13.x.y14.x.y15.x.y--

后续计划

在短期内,您可以预期团队将继续专注于跟上构成 Electron 的主要组件(包括 Chromium、Node 和 V8)的开发。虽然我们谨慎地不对发布日期做出承诺,但我们的计划是大约每季度发布 Electron 的新主要版本,其中包含这些组件的新版本。

您可以在 此处找到 Electron 的公开时间线

有关未来更改的更多信息,请参阅 计划中的重大更改 页面。

Electron 14.0.0

·阅读时间:6 分钟

Electron 14.0.0 已发布!它包含对 Chromium 93 和 V8 9.3 的升级。我们添加了一些 API 更新、错误修复和一般改进。阅读以下内容以获取更多详细信息!


Electron 团队很高兴地宣布发布 Electron 14.0.0!您可以使用 npm 通过 npm install electron@latest 安装它,或从我们的 发行网站 下载它。继续阅读以了解有关此版本的详细信息,并请分享您可能有任何反馈!

重大变化

Electron 发布节奏更改

从 2021 年 9 月开始,Electron 15 将每 8 周发布一个新的主要稳定版本。您可以在 此处阅读完整详细信息。Electron 15 将于 2021 年 9 月 1 日开始测试版,稳定版将于 2021 年 9 月 21 日发布。您可以在 此处找到 Electron 的公开时间表。此外,Electron 将支持的版本从最新的三个版本更改为最新的四个版本,直到 2022 年 5 月。请参阅 我们的版本控制文档,以获取有关 Electron 中版本控制的更多详细信息。

堆栈更改

重点功能

  • 默认值更改:nativeWindowOpen 现在默认为 true(查看文档)
  • 子窗口不再从其父窗口继承 BrowserWindow 构造选项。 #28550
  • 添加了新的 session.storagePath API 以获取磁盘上特定于会话的数据的路径。 #28665
  • 添加了 process.contextId,由 @electron/remote 使用。 #28007
  • Electron Fuse 后添加了实验性 Cookie 加密支持。 #29492

请参阅 14.0.0 发行说明,以获取新功能和更改的完整列表。

重大更改

以下是 Electron 14 中引入的重大更改。有关这些更改和未来更改的更多信息,请访问 计划中的重大更改 页面。

已移除:app.allowRendererProcessReuse

app.allowRendererProcessReuse 属性已移除,这是我们计划更紧密地遵循 Chromium 的进程模型以提高安全性、性能和可维护性的一部分。

有关更多详细信息,请参阅 #18397

已移除:浏览器窗口亲和性

构造新 BrowserWindow 时的 affinity 选项已移除,这是我们计划更紧密地遵循 Chromium 的进程模型以提高安全性、性能和可维护性的一部分。

有关更多详细信息,请参阅 #18397

API 更改:window.open()

可选参数 frameName 不再设置窗口的标题。此行为现在遵循 本机文档 中对 windowName 参数的说明。

如果您使用此参数来设置窗口的标题,则可以使用 win.setTitle(title) 方法。

已移除:worldSafeExecuteJavaScript

worldSafeExecuteJavaScript 已移除,没有替代方案。请确保您的代码在启用此属性的情况下也能正常工作。它从 Electron 12 开始默认启用。

如果您使用 webFrame.executeJavaScriptwebFrame.executeJavaScriptInIsolatedWorld,则会受到此更改的影响。您需要确保这两个方法返回的值都受 上下文桥 API 支持,因为这些方法使用相同的传值语义。

默认值更改:nativeWindowOpen 默认为 true

在 Electron 14 之前,window.open 默认使用 BrowserWindowProxy 进行模拟。这意味着 window.open('about:blank') 无法用于打开可同步脚本化的子窗口,以及其他不兼容性。nativeWindowOpen 现在不再是实验性的,并且现在是默认值。

有关更多详细信息,请参阅 Electron 中 window.open 的文档。

已移除:BrowserWindowConstructorOptions 从父窗口继承

在 Electron 14 之前,使用 window.open 打开的窗口会从其父窗口继承 BrowserWindow 构造选项,例如 transparentresizable。从 Electron 14 开始,此行为已移除,窗口将不再从其父窗口继承任何 BrowserWindow 构造选项。

请改用 setWindowOpenHandler 为新窗口显式设置选项。

webContents.setWindowOpenHandler((details) => {
return {
action: 'allow',
overrideBrowserWindowOptions: {
// ...
},
};
});

已移除:additionalFeatures

WebContentsnew-windowdid-create-window 事件中已弃用的 additionalFeatures 属性已被移除。由于 new-window 使用位置参数,因此该参数仍然存在,但始终为空数组 []。(注意:new-window 事件本身已弃用,并已替换为 setWindowOpenHandler。)窗口功能中的裸键现在将在选项对象中显示为值为 true 的键。

// Removed in Electron 14
// Triggered by window.open('...', '', 'my-key')
webContents.on('did-create-window', (window, details) => {
if (details.additionalFeatures.includes('my-key')) {
// ...
}
});

// Replace with
webContents.on('did-create-window', (window, details) => {
if (details.options['my-key']) {
// ...
}
});

已移除:remote 模块

Electron 12 中已弃用的 remote 模块现已从 Electron 本身中移除,并提取到一个单独的包中,@electron/remote@electron/remote 模块将 JavaScript 对象从主进程桥接到渲染器进程。这使您可以像在渲染器进程中一样访问仅主进程对象。这是 remote 模块的直接替代品。请参阅 模块的自述文件 以获取迁移说明和参考。

API 更改

  • 添加了 BrowserWindow.isFocusable() 方法以确定窗口是否可聚焦。 #28642
  • 添加了 WebFrameMain.visibilityState 实例属性。 #28706
  • 向传递给使用 setWindowOpenHandler 注册的窗口打开处理程序的详细信息对象添加了 dispositionreferrerpostBody#28518
  • 添加了 process.contextId,由 @electron/remote 使用。 #28007
  • Electron Fuse 后添加了实验性 Cookie 加密支持。 #29492
  • webRequest 侦听器详细信息添加了缺少的 resourceType 转换:fontpingcspReportmediawebSocket#30050
  • 添加了新的 session.storagePath API 以获取磁盘上特定于会话的数据的路径。 #28665
  • 添加了对 macOS 上的 Windows 控制叠加的支持。 #29986
  • 添加了对使用 --log-file=.../path/to/file.log 将 Chromium 日志记录到文件中的支持。此外,现在可以通过在第一个 JS tick 期间附加命令行开关来从 JavaScript 启用日志记录。 #29963
  • 在 node crypto 中添加了对 des-ede3 密码的支持。 #27897
  • 添加了一个 ContextBridgeMutability 功能,允许上下文桥对象发生变异。 #27348

已移除/弃用的更改

以下 API 已被移除或现在已弃用

  • 在 Electron 12 中弃用后,remote 模块已被移除。 #25734
  • 子窗口不再从其父窗口继承 BrowserWindow 构造选项。 #28550
  • 已移除 new-windowdid-create-window WebContents 事件中已弃用的 additionalFeatures 属性。 #28548
  • 已移除已弃用的 app.allowRendererProcessReuse 和 BrowserWindow 的 affinity 选项。 #26874
  • uploadToServer 为 false 时,crashReporter.startsubmitURL 选项不再是必需参数。 #28105

11.x.y 版本结束支持

根据项目的支持策略,Electron 11.x.y 版本已结束支持。鼓励开发者和应用程序升级到更新版本的 Electron。

后续计划

在短期内,您可以预期团队将继续专注于跟上构成 Electron 的主要组件(包括 Chromium、Node 和 V8)的开发。虽然我们谨慎地不对发布日期做出承诺,但我们的计划是大约每季度发布 Electron 的新主要版本,其中包含这些组件的新版本。

有关 Electron 未来版本中计划的重大更改的信息,请参阅我们的计划的重大更改

WebView2 和 Electron

·阅读时间:6 分钟

在过去几周里,我们收到了许多关于新的WebView2 和 Electron 之间差异的问题。

这两个团队都明确表示,目标是使桌面上的 Web 技术达到最佳状态,并且正在讨论一个共享的全面比较。

Electron 和 WebView2 都是快速发展且不断演进的项目。我们汇集了 Electron 和 WebView2 在今天存在的相似之处和差异的简要快照。


架构概述

Electron 和 WebView2 都从 Chromium 源代码构建以渲染 Web 内容。严格来说,WebView2 从 Edge 源代码构建,但 Edge 是使用 Chromium 源代码的分支构建的。Electron 不与 Chrome 共享任何 DLL。WebView2 二进制文件与 Edge(截至 Edge 90 的稳定通道)进行硬链接,因此它们共享磁盘和一些工作集。有关更多信息,请参阅常青分发模式

Electron 应用程序始终捆绑并分发其开发所使用的 Electron 的确切版本。WebView2 在分发方面有两个选项。您可以捆绑应用程序开发所使用的确切 WebView2 库,或者您可以使用系统上可能已存在的共享运行时版本。WebView2 为每种方法提供工具,包括在缺少共享运行时的情况下提供引导安装程序。从 Windows 11 开始,WebView2 将随系统提供。

捆绑其框架的应用程序负责更新这些框架,包括次要的安全版本。对于使用共享 WebView2 运行时的应用程序,WebView2 具有自己的更新程序(类似于 Chrome 或 Edge),该更新程序独立于您的应用程序运行。更新应用程序的代码或其任何其他依赖项仍然是开发者的责任,与 Electron 相同。Electron 和 WebView2 都不由 Windows 更新管理。

Electron 和 WebView2 都继承了 Chromium 的多进程架构,即一个主进程与一个或多个渲染器进程通信。这些进程与系统上运行的其他应用程序完全隔离。每个 Electron 应用程序都是一个单独的进程树,包含一个根浏览器进程、一些实用程序进程和零个或多个渲染进程。使用相同用户数据文件夹 的 WebView2 应用程序(如应用程序套件将执行的操作)共享非渲染器进程。使用不同数据文件夹的 WebView2 应用程序不共享进程。

  • ElectronJS 进程模型

    ElectronJS Process Model Diagram

  • 基于 WebView2 的应用程序进程模型

    WebView2 Process Model Diagram

在此处阅读有关WebView2 的进程模型Electron 的进程模型 的更多信息。

Electron 提供了用于常见桌面应用程序需求的 API,例如菜单、文件系统访问、通知等。WebView2 是一个组件,旨在集成到应用程序框架中,例如 WinForms、WPF、WinUI 或 Win32。WebView2 不会通过 JavaScript 提供 Web 标准之外的操作系统 API。

Node.js 集成到 Electron 中。Electron 应用程序可以使用渲染器和主进程中的任何 Node.js API、模块或节点原生插件。WebView2 应用程序不假设应用程序的其余部分是用哪种语言或框架编写的。您的 JavaScript 代码必须通过应用程序主机进程代理任何操作系统访问。

Electron 努力保持与 Web API 的兼容性,包括从Fugu 项目 开发的 API。我们有Electron 的 Fugu API 兼容性快照。WebView2 维护着类似的Edge API 差异列表

Electron 具有用于 Web 内容的可配置安全模型,从完全访问到完全沙箱。WebView2 内容始终处于沙箱状态。Electron 具有全面安全文档,用于选择您的安全模型。WebView2 也有安全最佳实践

Electron 源代码在 GitHub 上维护和提供。应用程序可以修改并构建自己的 Electron“品牌”。WebView2 源代码不在 GitHub 上提供。

快速总结

ElectronWebView2
构建依赖项ChromiumEdge
源代码在 GitHub 上可用
共享 Edge/Chrome DLL是(截至 Edge 90)
应用程序之间的共享运行时可选
应用程序 API
Node.js
沙箱可选始终
需要应用程序框架
支持的平台Mac、Win、LinuxWin(计划支持 Mac/Linux)
应用程序之间的进程共享从不可选
框架更新由以下内容管理应用程序WebView2

性能讨论

在渲染 Web 内容方面,我们预计 Electron、WebView2 和任何其他基于 Chromium 的渲染器之间几乎没有性能差异。我们为那些有兴趣调查潜在性能差异的人创建了使用 Electron、C++ + WebView2 和 C# + WebView2 构建的应用程序的脚手架

Web 内容渲染之外,还有一些差异会发挥作用,来自 Electron、WebView2、Edge 和其他团队的人员都表达了对进行详细比较(包括 PWA)的兴趣。

进程间通信 (IPC)

有一点差异我们希望立即强调,因为我们认为它通常是 Electron 应用程序中的性能考虑因素。

在 Chromium 中,浏览器进程充当沙箱化渲染器与系统其余部分之间的 IPC 代理。虽然 Electron 允许使用非沙箱化渲染进程,但许多应用程序选择启用沙箱以增强安全性。WebView2 始终启用沙箱,因此对于大多数 Electron 和 WebView2 应用程序,IPC 都会影响整体性能。

即使 Electron 和 WebView2 具有相似的进程模型,底层的 IPC 也不同。在 JavaScript 和 C++ 或 C# 之间进行通信需要编组,最常见的是编组为 JSON 字符串。JSON 序列化/解析是一项昂贵的操作,IPC 瓶颈会对性能产生负面影响。从 Edge 93 开始,WV2 将使用CBOR 用于网络事件。

Electron 通过MessagePorts API 支持任意两个进程之间的直接 IPC,该 API 利用结构化克隆算法。利用此功能的应用程序可以在进程之间发送对象时避免支付 JSON 序列化税。

总结

Electron 和 WebView2 有许多差异,但不要期望它们在渲染 Web 内容方面的性能有很大差异。最终,应用程序的架构和 JavaScript 库/框架对内存和性能的影响大于其他任何因素,因为无论 Chromium 在哪里运行,它都是Chromium

特别感谢 WebView2 团队审查这篇文章,并确保我们对 WebView2 架构有最新的了解。他们欢迎任何关于该项目的反馈

新的 Electron 发布节奏

·阅读时间:6 分钟

从 2021 年 9 月开始,Electron 将每 8 周发布一个新的主要稳定版本。


2019 年,Electron 转向 12 周发布周期 以匹配 Chromium 的 6 周发布周期。最近,Chrome 和微软都宣布了使我们重新考虑 Electron 当前发布周期的更改

  1. Chromium 计划从 2021 年 9 月 21 日的 Chrome 94 开始,每4 周发布一个新的里程碑版本。 此发布周期还增加了每 8 周一个新的扩展稳定版本选项,其中将包含所有更新的安全修复程序。

  2. Microsoft Store 将要求基于 Chromium 的应用程序不早于 2 个主要版本之内。例如,如果 Chromium 的最新发布的主要版本是 85,则任何基于 Chromium 的浏览器必须至少为 Chromium 版本 83 或更高版本。此规则包括 Electron 应用程序。

从 2021 年 9 月开始,Electron 将每 8 周发布一个新的主要稳定版本,以匹配 Chromium 的 8 周扩展稳定版本发布。

我们第一个使用 Chromium 扩展稳定版本的发布版本将是2021 年 9 月 21 日Electron 15

了解发布周期更改将影响其他下游应用程序,我们希望尽快让我们的开发者社区知道。继续阅读以了解有关我们 2021 年发布计划的更多详细信息。

Electron 15:临时 Alpha 版

鉴于我们最初的 Electron 15 版本针对的是非扩展稳定版本(Chromium 的扩展稳定版本基于其偶数版本),我们需要更改我们最初的目标发布日期。但是,Electron 应用程序必须使用 Chromium 的最新 2 个主要版本才能被 Microsoft Store 接受,这使得等待两个 Chromium 版本变得不可持续。

这两个要求使我们的团队面临着时间困境。将 Electron 15 迁移到包含 Chromium M94 将允许应用程序开发人员获得 Chromium 的第一个扩展稳定版本;但是,它也将使 Beta 版到稳定版的周期缩短至仅 3 周。

为了帮助进行此切换,Electron 将仅为 Electron 15 版本提供一个临时的Alpha 版本。此 Alpha 版本将使开发人员有更多时间测试和计划 Electron 15 版本的发布,并提供比我们当前的每日构建版本更稳定的版本。

Electron 15 的 Alpha 版本将于 **2021年7月20日** 发布。它将在 **2021年9月1日** 转换为 Beta 版本,并计划于 **2021年9月21日** 发布稳定版本。后续的 Electron 版本将不再发布 Alpha 版本。

2021 年发布计划

以下是我们 2021 年的当前发布计划

ElectronChromeAlpha 版本Beta 版本稳定版本稳定周期(周)
E13M91-2021-03-052021-05-2512
E14M93-2021-05-262021-08-3114
E15M942021-07-202021-09-012021-09-219(包含 Alpha)
E16M96-2021-09-222021-11-168
E17M98-2021-11-172022-02-0111

添加 Alpha 版本将 Electron 15 发布前的开发时间从 3 周延长到 9 周,更接近我们新的 8 周周期,同时仍然满足 Windows 应用商店提交的要求。

为了进一步帮助应用程序开发人员,**在 2021 年剩余时间到 2022 年 5 月,我们还将把支持的版本策略从最新的 3 个版本扩展到最新的 4 个版本。**这意味着,即使您无法立即更改升级计划,旧版本的 Electron 仍将收到安全更新和修复。

解决问题

我们在发布周期变更计划之前很久就发布了这篇文章是有原因的。我们知道,更快的发布周期会对 Electron 应用产生实际影响,其中一些应用可能已经发现我们的主要版本发布节奏过于激进。

我们已尝试在下面解决常见问题

❓ 为什么需要进行此更改?为什么不保持 12 周的发布周期?

为了在 Electron 中提供最新的 Chromium 版本,我们的时间表需要跟踪 Chromium 的版本发布。有关 Chromium 发布周期的更多信息,请访问 此处

此外,在 Microsoft 应用商店的新提交要求下,目前的 12 周发布周期将难以维持。即使是使用最新稳定版 Electron 的应用,也可能遇到大约两周的时间段,在此期间其应用可能会因新的安全要求而被拒绝。

每个新的 Chromium 版本都包含新功能、错误修复/安全修复和 V8 改进。我们希望您(作为应用程序开发人员)能够及时获得这些更改,因此我们的稳定版本发布日期将继续与其他每个 Chromium 稳定版本相匹配。作为应用程序开发人员,您将比以前更快地访问新的 Chromium 和 V8 功能和修复。

❓ 现有的 12 周发布计划已经非常快了。团队正在采取哪些措施来简化升级过程?

更频繁发布的一个好处是拥有更小的版本。我们了解升级 Electron 的主要版本可能很困难。我们希望较小的版本每次发布时引入的重大 Chromium 和 Node 更改以及重大破坏性更改更少。

❓ 未来版本的 Electron 是否会有 Alpha 版本可用?

目前没有计划永久支持 Alpha 版本。此 Alpha 版本仅适用于 Electron 15,作为一种帮助开发人员在缩短的发布周期内更轻松地进行升级的方式。

❓ Electron 是否会扩展支持的版本数量?

我们将把支持的版本策略从最新的三个版本扩展到最新的四个版本,直到 2022 年 5 月发布 Electron 19。Electron 19 发布后,我们将恢复到 支持最新的三个主要版本,以及 Beta 和 Nightly 版本。

E13 (2021 年 5 月)E14 (2021 年 8 月)E15 (2021 年 9 月)E16 (2021 年 11 月)E17 (2022 年 2 月)E18 (2022 年 3 月)E19 (2022 年 5 月)
13.x.y14.x.y15.x.y16.x.y17.x.y18.x.y19.x.y
12.x.y13.x.y14.x.y15.x.y16.x.y17.x.y18.x.y
11.x.y12.x.y13.x.y14.x.y15.x.y16.x.y17.x.y
----12.x.y13.x.y14.x.y15.x.y--

问题?

📨 如有任何疑问或疑虑,请发送邮件至 [email protected]加入我们的 Discord。我们知道这是一个会影响许多应用和开发人员的更改,您的反馈对我们非常重要。我们希望收到您的来信!

Electron 13.0.0

·阅读时间:3 分钟

Electron 13.0.0 现已发布!它包括对 Chromium 91 和 V8 9.1 的升级。我们添加了一些 API 更新、错误修复和常规改进。请阅读以下内容以了解更多详细信息!


Electron 团队很高兴地宣布 Electron 13.0.0 发布!您可以通过 npm install electron@latest 使用 npm 安装它,或从我们的 发行网站 下载它。继续阅读以了解有关此版本的详细信息,并请分享您的任何反馈!

重大变化

堆栈更改

重点功能

  • 添加了 process.contextIsolated 属性,该属性指示当前渲染器上下文是否启用了 contextIsolation#28252
  • 添加了新的 session.storagePath API 以获取磁盘上特定于会话的数据的路径。 #28866
  • 已弃用 WebContentsnew-window 事件。它由 webContents.setWindowOpenHandler() 替换
  • 添加了 process.contextId,由 @electron/remote 使用。 #28251

请参阅 13.0.0 发行说明,以获取新功能和更改的完整列表。

重大更改

  • window.open() 参数 frameName 不再设置为窗口标题。 #27481
  • 更改了 session.setPermissionCheckHandler(handler) 以允许 handler 的第一个参数 webContentsnull#19903

有关这些更改和未来更改的更多信息,请参阅 计划中的重大更改 页面。

API 更改

  • BrowserWindow 添加了 roundedCorners 选项。 #27572
  • 添加了新的 session.storagePath API 以获取磁盘上特定于会话的数据的路径。28866
  • 添加了通过上下文桥传递 DOM 元素的支持。 #26776
  • process.uptime() 添加到沙盒渲染器中。 #26684
  • 将缺少的字段添加到作为 context-menu 事件的一部分发出的参数中。#26788
  • 添加了对注册清单 V3 扩展服务工作者的支持。
  • 将“registration-completed”事件添加到 ServiceWorkers。 #27562

已移除/弃用的更改

以下 API 已被移除或现在已弃用

  • 已弃用 WebContentsnew-window 事件。它由 webContents.setWindowOpenHandler() 替换

  • 已删除已弃用的 shell.moveItemToTrash()#26723

  • 已删除以下已弃用的 BrowserWindow 扩展 API

    • BrowserWindow.addExtension(path)
    • BrowserWindow.addDevToolsExtension(path)
    • BrowserWindow.removeExtension(name)
    • BrowserWindow.removeDevToolsExtension(name)
    • BrowserWindow.getExtensions()
    • BrowserWindow.getDevToolsExtensions()

    改用 session API

    • ses.loadExtension(path)
    • ses.removeExtension(extension_id)
    • ses.getAllExtensions()
  • 以下 systemPreferences 方法已弃用

    • systemPreferences.isDarkMode()
    • systemPreferences.isInvertedColorScheme()
    • systemPreferences.isHighContrastColorScheme()

    改用以下 nativeTheme 属性

    • nativeTheme.shouldUseDarkColors
    • nativeTheme.shouldUseInvertedColorScheme
    • nativeTheme.shouldUseHighContrastColors

10.x.y 版本支持结束

根据项目的 支持策略,Electron 10.x.y 已达到支持结束。鼓励开发人员和应用程序升级到更新版本的 Electron。

后续计划

短期内,您可以预期团队将继续专注于跟上构成 Electron 的主要组件(包括 Chromium、Node 和 V8)的开发。虽然我们谨慎地不对发布日期做出承诺,但我们的计划是大约每季度发布 Electron 的新主要版本,其中包含这些组件的新版本。14.0.0 预计时间表 规划了 Electron 14.0 开发生命周期中的关键日期。此外,请参阅我们的版本控制文档,以获取有关 Electron 中版本控制的更多详细信息。

有关 Electron 未来版本中计划的重大更改的信息,请参阅我们的计划中的重大更改文档