网页游戏平台:最新进展

2015 年 7 月,我们发布了我们的 游戏技术路线图,并一直在努力解决开发者提出的痛点。

游戏是网页体验的重要组成部分。Mozilla 和其他浏览器供应商一直在努力寻找开发者可以迁移到的替代路径。随着插件的逐步退出(Firefox 52)以及许多浏览器计划在 2017-2018 年期间将 Flash 设置为点击播放,我们正在努力完善替代方案,确保其可行。许多有助于改进平台的新功能将在 Firefox 的未来几个版本中发布,我们也看到其他浏览器正在走类似的道路。

我们一直在与其他浏览器、工具制造商和游戏开发者紧密合作,进行大规模测试,并促进关键技术在所有主要浏览器中的普遍可用性。我们见证了 Facebook 上热门游戏取得成功,例如来自 King泡泡女巫 3 传奇糖果粉碎传奇,以及来自 NordeusTop Eleven。我们还有很多工作要做才能充分发挥平台的潜力,但今天我们想提供关于我们一直在做的事情以及您将在不久的将来在浏览器中看到的内容的最新情况。无论您使用的是编译代码库和/或 JavaScript,这里都有一些适合每个人的内容!

我们听到的反馈

当我们接触到游戏开发者、发行商和浏览器制造商时,我们听到了许多共同的担忧和需求

  • 开发者希望改善用户体验。他们告诉我们,他们希望看到代码大小减少、编译和加载时间加快、内存使用减少以及性能提升,以便用户更容易参与其中。
    • WebAssembly 是解决所有这些问题的重大进步。
    • 我们最近 宣布 四大浏览器已就标准的稳定初始版本达成共识,使所有浏览器都能够开始发布 WebAssembly。
    • Mozilla 旨在在 2017 年 3 月发布 WebAssembly,作为 asm.js 的继任者,它将在 Firefox 52 中发布。
  • 开发者希望能够覆盖尽可能多的用户,并且希望看到更多用户能够运行 WebGL 内容。
    • 有针对性的努力已经将非 Windows XP 机器上的桌面 WebGL 成功率从 80% 提升到了 99%。我们也看到其他浏览器出现了类似的趋势。此外,遥测数据显示,桌面 WebGL 的可用性与 Firefox 上的 Flash 相匹配。
    • 开发者希望在 WebGL 2 中使用 OpenGL ES3 功能,包括新的纹理格式,以及对浮点纹理过滤、渲染到多个渲染目标和 MSAA 多重采样的支持。
    • WebGL 2 支持 OpenGL ES3 功能。WebGL 2 于 2017 年 1 月在 Firefox 51 中发布,其他浏览器 也在紧随其后。
  • 开发者要求在 32 位系统上分配更大数量的地址空间,以便运行更大、更复杂的应用程序,从而获得更大的灵活性。
    • 32 位内存不足(OOM)问题通常是由浏览器进程由于地址空间碎片而无法分配大块内存引起的。
    • Firefox 旨在在 2017 年 4 月的 Firefox 53 中发布 32 位 OOM 解决方案。
      我们在 Firefox 的 64 位版本中没有类似的挑战。
  • 开发者希望获得更多关于 Firefox 用户在网络上使用的硬件的信息,以便为他们的开发决策提供参考。

详情

标准化和发布 WebAssembly

WebAssembly 是一种新兴的标准,其目标是定义一种安全、可移植、尺寸和加载时间效率高的二进制编译器目标,它提供了接近原生性能的性能——网络的虚拟 CPU。WebAssembly 正在 W3C 社区组 (CG) 中开发,其 成员 包括 Mozilla、Microsoft、Google 和 Apple。

WebAssembly 可以被认为是 asm.js 的继任者,Mozilla 倡导的项目,旨在突破现有 JavaScript 语言约束下的性能极限。尽管 asm.js 现在在所有浏览器中都提供了 令人印象深刻的性能,但作为一项新的标准,WebAssembly 消除了偶然的约束,使引擎能够越来越接近原生性能(同时保持与 JavaScript 相同的安全模型)。Firefox 中的初步测量结果 显示,平均而言,WebAssembly 使现实的 C/C++ 工作负载在 1.25 倍的原生速度内运行,低于 asm.js 的 1.38 倍——提高了 9%!随着整个管道的继续工作,预计将进一步提高速度。对于利用 WebAssembly 新功能(如 64 位整数算术)的合成工作负载,已观察到显著的 8 倍加速。

我们最近 宣布 WebAssembly 社区组已就标准的初始版本达成共识。可互操作的实现已 加入预发布 Firefox 和 Chrome 通道,并正在 ChakraJavaScriptCore 中开发。Mozilla 旨在在 2017 年 3 月发布 WebAssembly,作为 asm.js 的继任者,它将在 Firefox 52 中发布。

提高 WebGL 成功率

我们已经能够识别并解决影响 Firefox 上 WebGL 可用性的问题。特别是,Firefox 遥测数据显示,我们已将所有机器上的 WebGL 可用性故障率从 Firefox 47 中的 20% 以上降低到 Firefox 50 中的 8% 以下。有针对性的努力已将非 Windows XP 机器上的 WebGL 成功率从 80% 提升到了 99%。这与我们在其他浏览器中看到的改进程度一致。

标准化和发布 WebGL/WebGL 2

WebGL 2 基于 OpenGL ES 3.0 规范,并提供新的功能,包括 3D 纹理和 2D 纹理数组、ESSL 3.0(一种高级着色语言)、整数纹理格式和顶点属性、变换反馈以及用于更有效上传的统一块。它还添加了图元重启、帧缓冲区清除和失效、可分离采样器对象、遮挡查询和像素缓冲区对象。此外,一些可选的 WebGL 1 扩展现在已成为 WebGL 2 保证的核心部分,包括多个渲染目标、实例化绘制、深度和浮点纹理以及 sRGB 支持。同样值得注意的是对新的 ETC2 纹理格式 的支持,该格式在压缩纹理上提供了 alpha 支持,并在台式机和移动设备上均受支持。最后,改进的垃圾回收提供了更加流畅的体验。WebGL 2 于 2017 年 1 月在 Firefox 51 中发布

解决 32 位内存不足问题 (OOM)

对于使用编译代码库和 asm.js 的网页开发者来说,一个持续的痛点是在 32 位浏览器上遇到内存不足的情况。默认情况下,在 Windows 上,Firefox 是一个 32 位应用程序。这将 Firefox 的地址空间限制为最多 4 吉字节,随着时间的推移,这些空间往往会变得碎片化,并会阻止游戏请求足够大的分配以成功运行。

为了解决这个问题,我们提出了一种新的 大分配头。此头告诉浏览器尽力尝试在一个未碎片化的内容进程中加载文档,这将大大降低顶级浏览上下文的 OOM 失败率,即使在更大的分配上也是如此。我们的目标是确保如果跨进程导航的条件满足,网络应用程序能够可靠地分配 1 吉字节的连续地址空间。我们打算在 Firefox 53 中发布此解决方案。

另一个机会是鼓励用户使用 64 位浏览器,这允许应用程序使用大量的物理内存。这意味着地址空间耗尽(或 OOM)基本不可能发生。

现状

  • 我们 72% 的 Windows 用户在 64 位 Windows 上运行 32 位 Firefox。这些用户可以切换到 64 位 Firefox。
  • 25% 的用户在 32 位 Windows 上运行 32 位 Firefox。这些用户无法切换到 64 位 Firefox。
  • 3% 的用户已经在运行 64 位 Firefox。

由于几乎四分之三的 Firefox 用户在 64 位 Windows 上运行 32 位 Firefox,因此有一个巨大的机会可以通过加速向 64 位的转变来提高这些用户运行大型网络应用程序的能力。因此,根据我们的 64 位计划记录,我们计划在 2017 年 8 月(Firefox 55)将 Firefox 安装程序更改为默认情况下在 64 位 Windows 上安装 64 位版本。在 64 位 Windows 上将现有 32 位 Firefox 用户升级到 64 位 Firefox 可能会在 2017 年 10 月(Firefox 56)进行。

分享关于 Firefox 硬件受众的信息

假设您正在开发一款复杂的游戏或应用程序。您可能想知道网络用户在其系统上可以使用哪些功能,或者如何覆盖尽可能广泛的受众群体?为了帮助解决这些问题,我们 最近发布了 Firefox 硬件报告 来帮助回答这些问题,并为您的开发决策提供参考。

在网站上,您会找到各种数据点,显示 Firefox 网络用户在网络上使用哪些硬件和操作系统,以及随着时间的推移的趋势。这包括 CPU 供应商、核心和速度;系统内存;GPU 供应商、型号和显示分辨率;操作系统架构和市场份额;浏览器架构份额,以及最后,Flash 插件的可用性。

结论

我们现在专注于在未来几个月内实现上述所有改进。我们感谢游戏开发者、引擎提供商以及其他浏览器的引擎团队长期以来对这项技术的贡献。这是一项巨大的工作,如果没有您的帮助和反馈,我们无法共同完成。谢谢!

关于 Andre Vrignaud

安德烈·弗里格诺是 Mozilla 混合现实计划的平台战略主管,他负责指导 Mozilla 为实现开放、可持续的 3D 网络和生态系统而付出的努力的战略。此外,他还热衷于网络中立和隐私倡导。

更多安德烈·弗里格诺的文章...


5 条评论

  1. 皮诺

    我是无法使用 WebGL 的 1% 人员之一。据我所知,英特尔 GMA(预 HD 显卡)仅提供 OpenGL 1.4,而 WebGL 需要 OpenGL 2 或更高版本。这意味着像我的戴尔 Inspiron mini 1012(运行 64 位 Xubuntu 16.04)这样的 10 英寸笔记本电脑可以运行 Flash,但不能运行 WebGL。除了购买更新的(更大尺寸的)计算机外,还有其他解决方案吗?

    2017 年 3 月 2 日 08:44

  2. 贪婪

    我知道你们都是好心,所以说以下这些话我很抱歉,但我预测 WebAssembly 将成为 Web 历史上最糟糕的事情。

    其后果需要时间才能显现出来 - 可能是十年,所以如果 2027 年一切看起来都正常,我非常乐意承认我错了,而且过于悲观。

    Web 从未有过开箱即用的普遍支持的字节码。从来。(Flash 是我们最接近的,但那距离普遍性还差得远。)有了字节码,混淆就是默认选项,即使有文本映射,程序员的意图也会丢失。这不是现在 JavaScript 可以做什么与 WebAssembly 可以做什么的问题。(您可以在两者中做同样的事情 - 这就是 WebAssembly 特别令人烦恼的原因。)这是一个关于 *鼓励* 做什么的问题。

    我预测事物的发展如下:主要浏览器的初始发布和支持将伴随着一大堆演示和兴奋。兴奋会很快消退,因为大多数人会意识到/接受 JavaScript 对于人们想要做的大多数事情来说仍然更方便,而 WebAssembly(像任何新技术一样)最初会很笨拙。事情会继续像以前一样进行。但是,对性能敏感的群体将开始开发基于 WebAssembly 的产品和(最重要的是)库。他们还将开发使 WebAssembly 开发非常简单的工具链和框架,这些框架可能会在服务器上(例如,使用 node.wa)和客户端(即,是同构的)上运行。一大群以前专门专注于桌面开发的开发人员会发现,现在只需编译和点击就能进行 Web 部署。他们会发现他们根本不需要学习任何 JavaScript、HTML 或 CSS,并且可以使用他们自己的任何语言,效果一样好。

    这些最初的东西不会像 Web 一样。那些开发人员要么不在乎,要么认为这是一个优势。更多人会想用自己的语言进行 Web 开发,而几乎 *没有* 这些人会费心提供文本映射,尤其是那些保留程序员意图的文本映射。大型商店特别喜欢这种新方法。他们根本不在乎编译成乱码的方法带来的开放性问题 - 相反,混淆至少对他们来说具有偶然的优势。

    真正的转折点将出现在某个群体为网站开发创建具有广泛吸引力的 WebAssembly 工具链之后。也许是某种 CMS,或者一些可以创建移动应用程序网站的东西(这些网站目前默认情况下没有查看源代码)。卖点将专门是它比任何其他方法都快(无论是否相关)。在那时,人们将开始 *间接* 使用 WebAssembly,因为这是最简单的选择,而不是因为他们有意决定创建一个基于 WebAssembly 的网站。而且它是一种完全认可的“开放”基于标准的方法,所以为什么不呢?

    (我还应该指出,如果 WebAssembly 兴起,一直存在的使 JavaScript 更快的强烈压力将会减弱,这会产生一个负面反馈循环,使事情变得更糟。)

    在那时,Mozilla 几乎肯定会意识到自己犯的错误(我认为 Google/Apple/Microsoft 不会在乎),并且(如果它在 5-10 年后仍然有影响力)会努力推广更开放的现有替代方案,或者努力创建更开放的工具链。

    我只希望当那个时候到来时,Mozilla 和更广泛的开源运动知道该怎么做。

    我应该注意到:WebAssembly 最积极的用例是仅对最性能敏感的代码使用它。对于实际应用程序,这将是在非常不寻常的情况下。我写了相当多的代码,这些代码可以被认为是性能敏感的,即使在那里 JavaScript 也运行得非常好(特别是使用工作线程 - 尽管我渴望等待 WebGL 计算着色器)。在许多情况下,即使标准 CPython 也运行良好 - 这是因为算法/设计选择对性能的影响几乎总是比指令速度大得多。

    总之,我认为将 WebAssembly 限制在性能敏感代码中的结果发生的可能性最低,但这是最佳结果。它远落后于 WebAssembly 仅仅作为短暂的好奇心而消失,而我遗憾地认为是我上面概述的最有可能发生的情况。

    2017 年 3 月 3 日 06:05

    1. 卢克·瓦格纳

      编译到 Web 的能力已经存在至少十年了,正如您所辩论的 之前 使用 asm.js。在 asm.js 之前,有缩小器,它们现在已经成为普遍的做法,而且非常激进。添加 canvas 2D 和 3D 也增加了风险,即每个人都决定从头开始渲染所有内容,将 Web 视为一个大型帧缓冲区(事实上,人们已经 尝试过)。因此,WebAssembly 本身不会决定是否每个人都会切换到某个不透明的系统。此外,JavaScript 仍然是 Web 上唯一的“受祝福的”(内置的,高度优化的)高级语言,应用程序对脚本的需求不会消失。

      2017 年 3 月 8 日 09:04

      1. 贪婪

        感谢您提醒我那篇旧文章和评论。这证明了我的担忧,无论(是否)有根据,至少在一段时间内是保持一致的。:)

        Canvas(或它的某种等效模拟,比如 1 像素单元的表格)对于某些事情来说是必需的。但虽然画布是一个永远存在的风险,但 HTML 对于文档甚至应用程序界面来说 *非常* 方便,而且很难很好地复制。但是,我认为画布阻碍了 SVG 在矢量图形中适当的采用和优化。我相信随着时间的推移,这种情况正在改善,因为 SVG 的性能对比得到了改善。

        缩小和(特别是)asm.js 目前使用得很少,与全球 JIT 非常相似,主要用于热点代码(即库)。我认为(不带偏见)这是因为它们被视为黑客。当 asm.js 首次问世时,我记得阅读过的许多评论中都包含了抱怨(无论多么误导),即最终结果仍然只是 JavaScript。大多数(非 JavaScript)人想要“真正的”字节码 - 现在他们有了。它不仅是 Web 上的一等公民,Mozilla(以及很快的其他人)还积极地将其宣传为 *比 JavaScript 快* (=更好)。如果开发了合适的工具链(这些工具链本身可能是基于浏览器的,而且不是开放的),WebAssembly 的便捷性和感知的开放性可能不会与 JavaScript 不同。那么,这样的风险到底值得多少收益呢?

        木已成舟,追悔莫及,所以我没有希望或期望说服任何人这里可能存在一个大问题。在这一点上,我只是在做出预测(并公开进行预测),希望如果预测成真,至少会有一些预警。

        2017 年 3 月 10 日 05:50

  3. diarec

    非常感谢 Mozilla

    2017 年 3 月 4 日 07:53

本文评论已关闭。