在iOS 8上的HTML5游戏性能


iOS 8现已发布,它代表了HTML5游戏在Safari和本地应用程序(如PhoneGap使用的)的网络视图方面的性能的一个根本性改进。这在很大程度上是由于iOS 8现在支持WebGL,它可以significantly boost performance即使是2D奥运会,也支持WebGL shader effects。iOS 8还引入了一个新的Javascript编译器,即Fourth Tier LLVM (FTL) JIT,这进一步提高了Javascript逻辑性能。有一个小问题:由于iOS版本中的缺陷,PhoneGap还不能充分利用新的性能改进,但这可能会在未来的更新中得到解决。我们运行了一系列用Construct 2制作的游戏基准来量化性能改进,结果令人印象深刻。

性能测试

我们运行了四个不同的性能测试:

  • sbperftest(“太空激射器性能测试”):一款真实世界的游戏,自动运行,在大约一分钟的时间内测量帧率。这是我们最喜欢的测试,因为它可能最好地代表了一个HTML5游戏的真实世界性能。
  • renderperfgl(“使用WebGL的渲染器性能”):一种人工测试,用于测量在帧率降至30 FPS之前,它可以在屏幕上填充多少个精灵。如果WebGL不可用,它将返回到canvas2d(就像构造2引擎总是做的那样)。这个测试很好地测量了为许多精灵发出抽取调用的CPU开销。
  • particles,全屏粒子效果产生大约850个粒子并测量帧速率。当大量使用粒子效果时,这对于测量帧速率很有用。
  • flyingalong,这是Construct 2的游戏模板之一,我们选择它是因为它大量使用平铺背景,这在iOS的canvas2d渲染器中显得很慢(但在WebGL中有很大改进)。

我们测试了四个平台:

  • 设备浏览器Safari
  • PhoneGap 3.5,它利用了应用程序内的网络视图,但从PhoneGap 3.5开始,它不再使用新的更快的网络视图控件。PhoneGap的未来版本应该会更快,并与Safari的性能相匹配。稍后会有更多相关信息。
  • 一个用于比较的非浏览器包装引擎
  • 另一个用于比较的非浏览器包装引擎(也是我们唯一官方支持的非浏览器包装引擎)

我们在iPhone 4S和iPad 2上测试了iOS 7.1和iOS 8。这些是2011年发布的iOS 8支持的最老的设备。我们选择这些是因为测量低端设备对于了解运行iOS 8的任何设备的最低性能水平非常有用。最新的设备功能强大得多,但要接触到广泛的受众,了解较弱的硬件将如何应对是很重要的。

野生动物园的表演

Safari还可以充分利用JIT编译来优化Javascript,以获得最佳性能。从iOS 8开始,它还支持WebGL。这对游戏帧率有什么影响?在苹果手机上,4S:

Safari on iPhone 4S performance results

在iPad 2上:

Safari on iPad 2 performance results

我们可以立即看到显著的改进:

  • 在iOS 7上,sbperftest偶尔会出现问题,在iPhone 4S上平均每秒38帧。有了iOS 8和WebGL的支持,它大部分时间都能以60 FPS的速度滑行。对于现实世界的游戏来说,这是一个巨大的进步。
  • 粒子效应要快得多。在iPhone 4S上,性能至少提高了4倍。
  • “飞行龙”模板是一个简单的游戏,但是使用了很多平铺背景对象。iOS的canvas2d渲染器渲染平铺图像的性能似乎非常差,在这些设备上只能管理大约20 FPS。我们的WebGL渲染器的优势之一是,我们可以避免低质量的canvas2d实现,并始终使用我们自己精心调整的渲染代码来获得最佳性能。它成功地将该模板的性能恢复到60 FPS的平滑速度。使用平铺背景或波形图的游戏应该会有很好的性能提升。

当我们以30帧/秒的速度测量屏幕上能显示多少精灵时,WebGL的性能真的非常出色:

Safari sprites at 30 FPS performance results

这里的改进简直不可思议,与我们在其他平台上看到的不相上下。与canvas2d相比,我们的WebGL渲染器效率极高,并且大幅降低了每精灵渲染的开销。这使得精灵渲染能力增加了约10倍。雪碧点数高的游戏在iOS 8上的性能应该会有很大提高。

非浏览器包装器性能

茧和弹出都是“非浏览器包装”:它们不使用真正的浏览器技术,而是在独立的Javascript引擎上构建一些面向游戏的特性。我们在运行sbperftest的iOS 7.1和iOS 8之间测量了这些引擎的性能。

Non-browser wrappers performance results

没有任何改进——如果有什么改进的话,性能略有下降,但可能在误差范围内。由于iOS的安全限制,包装器通常不能使用JIT编译来完全优化Javascript。这迫使Javascript引擎停留在解释器模式,并且可能比优化JIT的Safari浏览器慢几倍。通常,速度较慢的Javascript引擎对游戏的性能要求不高。iOS 8最终允许使用网络视图的应用程序使用JIT编译(PhoneGap需要更新以利用这一点——稍后会有更多介绍)。然而,由于非浏览器包装器使用定制引擎而不是网络视图,它们似乎仍然停留在解释器模式,并且在iOS 8上没有表现出任何性能改进。

我们也在包装器上运行了所有其他测试,但是结果和上面一样:很少或者没有变化。iOS 8上的Safari浏览器现在在每次测试中都优于包装器,通常达到包装器不能达到的60 FPS。

PhoneGap性能

当我们衡量PhoneGap的性能时,我们实际上是在衡量应用内的UIWebView控件性能。这使用了真正的浏览器技术,但是在历史上有严重的性能问题:没有图形处理器加速的渲染,没有Javascript代码的JIT编译——这是两个世界中最糟糕的,而且通常太慢了,以至于不能用它来发布游戏。从iOS 8开始,UIWebView可以使用图形处理器加速的渲染(并且也支持WebGL),但是仍然不能用Javascript实现最佳性能。这意味着它的性能仍然不如Safari。然而,好消息是iOS 8增加了一个新的WKWebView控件,它可以进行JIT编译,因此与Safari的性能相当。PhoneGap需要更新,以便从用户界面视图切换到用户界面视图,从而获得这些性能提升。这种情况还没有发生,而且似乎被WKWebView中的一些漏洞所阻碍;希望这个问题能很快在更新中得到解决。与此同时,我们测试了PhoneGap 3.5,它使用了仍在改进的UIWebView控件。

这些结果只适用于iPad 2——苹果4S手机上的结果遵循相同的模式,所以没有什么可以增加的。我们运行了renderpergl测试来了解原始渲染性能。

iPad 2 sprites at 30 FPS performance results

这里有几件有趣的事情需要注意:

  • iOS 8的PhoneGap性能仍有大幅提升,这可能要归功于WebGL的支持:它仍能管理iOS 7上PhoneGap的4倍多的精灵。
  • iOS 8上的PhoneGap现在在性能上与非浏览器包装引擎相当。考虑到UIWebView和包装器能够使用图形处理器加速的渲染而不是JIT编译,这是有意义的。这很重要,因为从iOS 8开始,切换到PhoneGap并不比使用包装器慢。
  • 显然,Safari的表现仍明显优于PhoneGap。然而,一旦PhoneGap切换到WKWebView,我们希望它能缩小这一差距,并与Safari的性能相匹配。

即使没有更快的WKWebView,这对于在iOS上将HTML5游戏作为本地应用发布来说已经是一个很大的改变。从性能方面来说,从包装器切换到PhoneGap没有什么损失,但是有很多好处。包装器倾向于挑选一小部分浏览器特性,而忽略了其余的。因此,它们不支持浏览器支持的许多功能,如网络音频效果、网络工作者、表单控件、XML解析等等。PhoneGap支持所有这些,因为它是一个真正的浏览器引擎。这意味着PhoneGap实际上在性能上是相同的,并且在功能支持上明显更好。我们最新的测试版覆盖了一些支持广告,到下一个稳定版本,我们预计还将支持游戏中心和带有PhoneGap的IAP。

当PhoneGap支持WKWebView时,性能将再次超越Safari的标准。在这一点上,与PhoneGap相比,使用包装器实际上意味着性能显著下降。因此,现在就开始使用PhoneGap似乎是个好主意。它并不慢,已经支持了更多的特性,当PhoneGap更新到WKWebView时,你将无需做任何事情就能获得另一个巨大的性能提升!

包装纸的末端

当UIWebView是软件渲染的并且缺乏WebGL支持时,设计了非浏览器包装引擎CoNGJS和Excepa。他们的主要吸引力是更好的性能,因为他们的网络图形语言支持和图形处理器加速渲染的使用。然而,它们不再具有性能优势,而具有真正的功能支持劣势。在不久的将来,他们实际上也会有很大的性能劣势。考虑到它们的速度会比PhoneGap慢,功能支持也会比PhoneGap差,很难看出它们长期来看有什么用。这是我们在2006年决定反对茧的一个重要因素r179,出于类似的原因,我们预计最终会反对弹出窗口支持,转而支持PhoneGap。

在安卓方面,安卓L将会给PhoneGap带来同样的性能和功能支持,包括对WebGL的支持。安卓更新的推出可能非常缓慢,但幸运的是,我们同时拥有Crosswalk,它将Chrome的全部性能和功能带到了本地应用程序中,并支持安卓4.0+。出于类似的原因,我们已经建议使用人行横道代替包装发布到安卓系统。从长远来看,安卓L最终也会使人行横道变得不必要,但是我们会继续支持它一段时间(可能是几年)来覆盖安卓4.0+的支持。

旧版本的iOS怎么样?

与安卓不同,苹果非常擅长快速让大多数用户了解最新版本的iOS。iOS 7在2008年达到了74%的市场份额less than three months一年后currently stands at 92%。我们预计iOS 8将遵循类似的更新速度。我们认为,在像PhoneGap这样的平台上使用真正的浏览器引擎所带来的改进的功能支持,是值得让少数使用旧软件的用户进行权衡的,尤其是当PhoneGap获得了WKWebView支持并开始远远超过包装器时。我们认为,在最新的iOS 8上,你可以接触到额外的少数用户,或者为绝大多数用户牺牲很多性能和功能。不管怎样,iOS 8和它的后继者最终将获得接近100%的支持,甚至不会放弃一小部分市场。这为未来描绘了一幅非常有希望的画面:最终,我们将有办法在不放弃任何功能或性能的情况下,向iOS和安卓发布HTML5游戏。

结论

iOS 8为今天的HTML5游戏带来了巨大的性能提升。它对使用WebGL着色器效果、粒子效果、高对象计数、平铺背景/波浪形或PhoneGap发布的游戏特别重要。从长远来看,这意味着对使用PhoneGap的本地iOS游戏的巨大支持,以及非浏览器包装引擎的可能消亡。

现在,每一个主要的桌面和移动平台都支持高性能的JIT编译的Javascript和WebGL支持(even Internet Explorer!)。我们从未如此确信网络是平台,HTML5游戏是未来。