#更新:
本文所述方法还不够严谨,目前我们的测试项目已经过审和上线,不过仍然无法启用 JIT。
猜测是需要添加 Extended Virtual Addressing 和 Allow Execution of JIT-compiled Code Entitlement
不过由于最近 3.0 发布以及 Cocos 十周年,我们暂时没人力继续跟进了。非常抱歉让大家空欢喜一场!
#正文
上周,苹果在 iOS 14.2 上悄然支持了 JIT!目前可用于所有 A12(iPhone XS)以上设备。
由于 Cocos Creator 在 v2.2.0 就已经使用 V8 做为 iOS 原生平台的 JS 执行引擎,因此可以直接启用 JIT,大幅提高 JavaScript 在这些设备上的运行性能!
什么是 JIT ?
什么是 JIT ?它在 iOS 上的工作方式是什么?
JIT 即 Just-In-Time(即时编译),是一种程序动态编译技术,使用 JIT,JavaScript 源码会实时翻译成机器的原生代码,让性能大幅提升!
此前 iOS 一直从系统层面禁用了 JIT,导致 V8 只能运行于 JIT-less 模式下,无法获得像 Android 那样的最佳性能。
下图是 V8 官方提供的测试结果,蓝色是基准性能(100%),下面三项是 JIT-less 与各自的 JIT 版本性能对齐后的百分比,显然 JIT-less 性能通常大幅落后于 JIT。
本文将对比 Cocos Creator 在 iOS 上开启 JIT 后的性能,并且给出 开启方法,开发者们只需要对 Cocos 引擎的原生部分进行很小的改动,性能就能获得大幅提升。
性能对比
为了模拟真实游戏情况,我们采用 Cocos Creator 2.4.3,运行每一帧都包含大量节点逻辑操作的测试例,发现在各种测试例中,开启 JIT 将使 游戏的整体性能提升 2-3 倍!并且对内存占用几乎没有影响。
我们还附带进行了渲染专项测试,虽然渲染测试的瓶颈更多在于 GPU 自身的性能,但仍有不少的提升。对纯 2D 场景,平均帧率提升近 2 倍,3D 场景则提升了 10-35%!
以上测试所用工程:
https://github.com/cocos-creator/performance-tests
彩蛋:3D 物理性能优化
我们还使用了 Cocos Creator 3D 进行测试,发现在物理测试例中,帧率提升了 20-30 倍!
这是由于在 Cocos Creator 3D 1.2 版本中,物理暂时基于 JS 版本的 ammo.js 实现,因此十分依赖 JS 的逻辑运算性能,非常适合通过 JIT 进行优化。
测试工程:
https://github.com/cocos-creator/example-3d/tree/master/physics-3d/assets/demo/benchmark
在测试例的场景中,我们放置了大量的刚体,其中分别包含静态球、静态盒、动态球和动态盒,每种刚体的数量相等。JIT-less 模式下,帧率记录成小数点的原因是性能差距实在太大,我们不得不减少测试对象,再把帧率折算回去。
JIT 开启方法
只需要简单的2个步骤即可开启 JIT:
-
确保 Cocos Creator 项目为 v2.2.0 或更高版本,才能在 iOS 启用 V8;
-
无需改动游戏,直接合并此 PR 到原生工程,建议通过自定义引擎或构建模板实现:
https://github.com/cocos-creator/cocos2d-x-lite/pull/3001
此方法会在运行时判断设备是否支持 JIT,当运行于 A12 及 iOS 14.2 以上环境时会自动启用 JIT,否则会采用原有的 JIT-less 模式。
建议开发者在符合条件的设备上进行测试。
以上就是本文介绍的主要内容。
借助开源的威力,开发者可以在原有的引擎版本上持续迭代,无须等待官方发布新版本,无须全面升级引擎。
Cocos 从诞生的第一天起,就坚持免费开源的发展方向,让开发者能够站在上帝视角把控游戏的运行结果,守护项目顺利上线。
开源意味着无限可能,不论是问题修复、性能优化还是功能扩展,开发者都能具有最大的信心,也能享受 Cocos 带来的游戏开发乐趣!