Firefox 54:E10S-Multi、WebExtension API、CSS clip-path

“E10S-Multi”:Firefox 的新多进程模型

今天的版本完成了 Firefox 向完全多进程浏览器的转变,除了 UI 进程之外,它还会运行许多并发的内容进程,并且在 Windows 上还会运行一个特殊的 GPU 进程。这种设计使利用现代处理器上的所有可用内核变得更加容易,并且将来可以安全地隔离网页内容。它还提高了稳定性,确保单个内容进程崩溃不会导致所有其他标签或浏览器剩余部分崩溃。

Illustration of Firefox's new multi-process architecture, showing one Firefox UI process talking to four Content Processes. Each content process has several tabs within it.

多进程 Firefox 的初始版本(代号为“Electrolysis”,简称“e10s”)于去年 8 月与 Firefox 48 一起发布。这个第一个版本将 Firefox 的 UI 移动到它自己的进程中,以便即使在负载下,浏览器界面也能保持流畅。Firefox 54 进一步将此提升到了一个新的水平,它并行运行许多内容进程:每个进程都有自己的 RAM 和 CPU 资源,由主机操作系统进行管理。

无论优化程度如何,额外的进程确实会带来少量的内存开销,但我们已经付出了极大的努力,将开销降到了最低。即使有了这些优化,我们仍然希望做更多的事情来确保 Firefox 能尊重你的 RAM。这就是为什么,Firefox 不会为每个标签都生成一个新进程,而是设置了一个上限:默认情况下是四个,但 用户可以配置about:config 中的 dom.ipc.processCount)。这样可以让你掌控一切,同时仍然让 Firefox 能够充分利用多核 CPU。

要详细了解 Firefox 的多进程体系结构,请查看这篇文章 关于寻找“金发姑娘”浏览器的 Medium 帖子

新的 WebExtension API

Firefox 继续快速实现新的 WebExtension API。这些 API 旨在跨浏览器工作,并且将在今年 11 月 Firefox 57 发布时成为唯一可用于添加加载项的 API。

最值得注意的是,现在可以使用 WebExtensions 创建 自定义 DevTools 面板。例如,下面的屏幕截图显示了 Vue.js DevTools 的 Chrome 版本在 Firefox 中运行,无需任何修改。这极大地减少了 DevTools 加载项作者的维护负担,确保无论你偏好哪个框架,其工具都可以在 Firefox 中运行。

Screenshot of Firefox showing the Vue.js DevTools extension running in Firefox

此外

加载项博客上阅读有关新的和更改的 API 的完整集合,或查看 MDN 上的完整 WebExtensions 文档

CSS clip-path 中的形状

CSS clip-path 属性允许作者定义元素的哪些部分可见。以前,Firefox 仅支持定义为 SVG 文件的裁剪路径。在 Firefox 54 中,作者还可以使用 CSS 形状函数 来创建圆形、椭圆形、矩形或任意多边形。(演示)。

与许多 CSS 值一样,裁剪形状也可以进行动画。有一些 规则控制值之间插值的执行方式,但简而言之:只要你是在相同形状之间进行插值,或者是在具有相同顶点数的多边形之间进行插值,你应该没问题。以下是如何对圆形裁剪进行动画演示

你还可以根据用户输入动态更改裁剪,例如,在这个示例中,一个“潜望镜”效果由鼠标控制

要了解更多信息,请查看上周的 关于 clip-path 的文章

Project Dawn

最后,Firefox 54 的发布标志着 Project Dawn 过渡的完成,消除了 Firefox 的预发布版本通道(代号为“Aurora”)。Firefox 版本现在每六周直接从 Nightly 转移到 Beta。Firefox Developer Edition 以前基于 Aurora,现在基于 Beta。

对于早期采用者,我们还将 Firefox Nightly for Android 在 Google Play 上提供

关于 Dan Callahan

Mozilla 开发者关系工程师,前 Mozilla Persona 开发者。

更多 Dan Callahan 的文章…

关于 Belén Albeza

Belén 是 Mozilla 开发者关系的工程师和游戏开发者。她关心网页标准、高质量代码、可访问性和游戏开发。

更多 Belén Albeza 的文章…


22 条评论

  1. ed

    棒极了

    我在我的机器上使用 2c/4t 测试它,但我无法超过 3 个线程。FF 线程是否有与核心数量相关的限制?

    2017 年 6 月 13 日 下午 12:50

    1. Israel M

      我想你指的是超过 3 个进程?
      首先,访问 about:support,确认“多进程 Windows”已启用。如果未启用,则可能需要禁用某些加载项才能使其正常工作。

      之后,您可以查看 about:config 并查找“dom.ipc.processCount”设置。如果其他方法都无效,则将其提高到 4 并重新启动。

      Dan 或 Belen 可能有更好的答案可以提供给您 :)

      2017 年 6 月 13 日 下午 16:49

    2. Dan Callahan

      如果 e10s 正在运行,当您打开 4 个或更多标签时,它应该使用 4 个进程(+1 个 UI 进程)。Israel 说得对,检查方法是打开 about:support 并查看“多进程 Windows”行。如果您打开了n个窗口,它应该显示“n/n”。有两个需要注意的地方:1) 作为推广的一部分,e10s-multi 仅为 80% 的发布用户启用,这样我们可以确保我们没有引入新的崩溃。一旦我们确信一切稳定下来,我们将将其提高到 100%。2) 如果您启用了某些加载项或辅助功能,则可以禁用 e10s。

      2017 年 6 月 13 日 下午 18:48

      1. Egan

        >>>e10s 可以禁用,如果您启用了某些加载项或辅助功能

        我如何获取阻止 e10s 的不兼容加载项列表?

        作者注:请参阅我下面的回复

        2017 年 6 月 14 日 上午 01:57

  2. Juraj M.

    最后,我的 Group Speed Dial 能够覆盖新标签页了!干得好!

    https://addons.mozilla.org/en-US/firefox/addon/groupspeeddial/

    2017 年 6 月 13 日 下午 14:07

  3. o

    我希望截图中的 Material Design 不会出现在 Firefox 中。Material Design 太糟糕了。请不要过度使用动画或饱和颜色。

    2017 年 6 月 13 日 下午 18:34

    1. Dan Callahan

      不用担心,示例应用程序(以及 Vue DevTools)正在使用 Material Design,但它们是第三方的东西。其余的只是 Firefox 的正常紧凑深色主题,该主题已经存在几年了。:)

      2017 年 6 月 13 日 下午 18:38

  4. Sapa

    我如何确定哪些加载项阻止了切换到多进程模式?

    作者注:请参阅我下面的回复

    2017 年 6 月 14 日 上午 02:30

  5. Dan Callahan

    由于有几个人问到了这个问题:我们正在分阶段逐步推广 e10s-multi。

    目前,e10s-multi 仅默认情况下为没有任何加载项安装的用户启用。即使这样,20% 的用户仍然使用普通 e10s,作为对照组。

    随着我们对 e10s-multi 的稳定性越来越有信心,这些比率和标准将在发布过程中发生变化。

    如果你想加入 e10s-multi,请访问 about:config 并将 dom.ipc.processCount 的值设置为 4。你无需重启浏览器即可生效。当然,这样加入意味着你承担了更大的浏览器不稳定的风险。如果你发现任何问题,只需返回 about:config,右键单击 dom.ipc.processCount,然后选择“重置”。

    为了确保正常 e10s 正常运行(e10s-multi 的先决条件),请访问 about:support 并查找“多进程窗口”行。只要最左边的数字大于或等于 1,你就设置好了。如果显示“0/x(被附加组件禁用)”,则表示你的一个或多个附加组件不兼容,必须将其删除。我们正在将有关旧版附加组件的内置警告添加到 Firefox 55 中,但目前请考虑安装 附加组件兼容性报告器 附加组件。当你单击工具栏中的图标时,它应该会列出你的每个附加组件,以及它是否与 e10s 兼容。

    2017 年 6 月 14 日 下午 12:26

  6. Surya

    所以这意味着我们很多很多心爱的扩展程序从 57 版本开始将不再工作?那 Tab Groups 扩展程序呢?这个扩展程序对我来说至关重要,也是我选择使用 Firefox 而不是其他浏览器的主要原因。我无法想象这个功能不再起作用。

    2017 年 6 月 15 日 下午 11:39

    1. Dan Callahan

      是的。但是,距离 Firefox 57 发布还有半年时间,数千个附加组件 已经移植到或使用这些新的 API 编写了。

      更改浏览器 UI 的附加组件,例如 Classic Theme Restorer 或 Tab Groups,处于更加不稳定的状态。有一些关于标签分组/组织的新兴努力,我们距离 Firefox 57 发布还有几个月的时间,所以有很多时间让事情变得顺利。

      2017 年 6 月 15 日 下午 8:25

  7. jon

    WebExtension API 工作很棒
    – 旧式插件还能运行多长时间?
    – 有没有一种简单的方法可以迁移(例如 Selenium IDE)插件 - 这些 API 看起来非常不同?

    2017 年 6 月 15 日 下午 11:50

    1. Dan Callahan

      旧式插件将在 11 月的 Firefox 57 之前继续运行。但是,在那时,你也可以切换到 Firefox 扩展支持版本(“ESR”),这将为你提供大约一年的额外时间。

      这些 API 非常不同,但它们基本上是 Chrome API 的超集,所以对于 Chrome 中具有等效版本的附加组件,应该能够在没有任何代码修改的情况下移植该版本。我不知道 Selenium IDE 的具体情况,但自动化测试对我们来说非常重要(我们最近在 Firefox 的 Nightly 版本中增加了无头支持),所以我相信当 Firefox 57 发布时,会有一些东西来填补这个空白。

      2017 年 6 月 15 日 下午 8:22

  8. RobertLu

    嗯,WebExtension 仍然无法拦截 websocket 请求吗?

    我的意思是,直接将 websocket 数据包发送到另一个 IP,而无需修改。

    2017 年 6 月 16 日 上午 3:38

    1. Dan Callahan

      无法使用 WebExtensions 拦截 WebSocket 请求。我已经提交了 错误 1373639 来跟踪这个问题。

      2017 年 6 月 16 日 上午 6:28

  9. gabe

    那移动设备呢?这是否弥合了移动扩展程序的差距,或者只是屈服于 Chrome 的强势标准?

    如果我能在 Fennec 上使用 uMatrix,这将是天赐之物!

    2017 年 6 月 16 日 上午 10:13

    1. Dan Callahan

      MDN 上的 API 兼容性表 中,显示了哪些 API 在桌面和 Fennec 上可用。我相信大多数相关 API 在这两个平台上都能正常工作,但我还没有专门针对 Fennec 上的 uMatrix 等阻断程序进行研究。

      2017 年 6 月 16 日 上午 10:21

  10. Baraa

    您好,

    为什么 Mac 上 dom.ipc.processcount 的默认值为 1?

    最好的祝福,
    B

    2017 年 6 月 27 日 上午 3:36

    1. Dan Callahan

      那只是用户覆盖。如果 dom.ipc.processCount 被用户从其默认值更改,我们将使用该值,否则我们将使用不同的计算来确定要运行的进程数量。

      2017 年 6 月 27 日 上午 10:31

      1. Baraa

        那么,您建议保留默认值吗?

        谢谢。

        2017 年 6 月 27 日 下午 12:24

        1. Dan Callahan

          一般来说,我建议将其保留为默认值 - 随着我们对 e10s-multi 的稳定性和性能越来越有信心,我们将增加默认值。只有在你想加入更多进程(可能会有更多崩溃的风险)时,才调整它。:)

          2017 年 6 月 27 日 下午 4:12

  11. Baraa

    谢谢 :-)

    2017 年 6 月 28 日 上午 0:08

本文评论已关闭。