背景
在 v1.7 内测版发布帖中
http://forum.cocos.com/t/cocos-creator-v1-7-0/51658/
大家应该已经注意到了,我们在这个版本中更新了 JSB 2.0 的底层实现,得益于此,v1.7 在 iOS 平台的性能将得到大幅度的优化,同时,安卓平台的稳定性也更好。具体的性能表现可以看看 @colinsusie 的测试帖:
http://forum.cocos.com/t/creator1-7/51536
JSB 2.0
专门开这个帖子是希望能给大家普及一下 JSB 2.0 的一些背景知识,同时鼓励发布原生版本的用户都去尝试一下 v1.7 内侧版本,如果发现任何问题,在这里或者内测版发布帖都可以跟我们反馈。
首先,Cocos Creator 原生平台的基础架构和 Cocos2d-x 一脉相承,虽然使用了不同的仓库,但是框架上是没变化的:在 Cocos2d-x C++ 引擎的基础上,通过 JS Virtual Machine 来支持 JS 脚本的执行,同时通过 JSB 绑定技术暴露 C++ API 到 JS 层使得 JS 代码可以调用引擎 API。
在 v1.6 以及之前版本中,Cocos Creator 一直使用 Spidermonkey 作为内置的 JS VM,并且一直直接使用 Spidermonkey 的 API 来实现绑定层代码。这点在 v1.7 中发生了重大的改变,我们将内置的 JS VM 切换为 V8 以及 JavaScriptCore(JSC),根据发布平台自动切换,并且抽象统一了绑定层的 API,让不同的 JS VM 可以无缝切换。
(如果有人不清楚这三者的区别,Spidermonkey 是 Firefox 中的 JS VM,V8 是 Chrome 的,JSC 是 Safari 的)
Cocos Creator v1.7 JSB 2.0 架构图

如图中所示,v1.7 中,发布 Windows, Android 平台的时候我们将自动使用 V8 作为底层 JS 引擎,发布 iOS Mac OS X 的时候将使用 JSC。另外,图中的 Abstract Binding APIs 就是我们抽象的绑定层 API,所有的绑定代码都基于这套 API 来实现,与实际用哪种 JS 引擎没有关系。
优势
在这样的重构之后,我们获得了很多前所未有的优势:
- JSC 是苹果的亲儿子,支持基础的 JIT,性能远高于 Spidermonkey(V8 无法关闭 JIT 所以无法用于 iOS)
- JSC 是 iOS 提供的系统库,游戏包中将不再包含 JS VM,缩小包体
- V8 以及 JSC 的垃圾回收机制都比 Spidermonkey 更稳定高效
- 抽象出统一的绑定层 API 之后,不仅抹平了不同 JS 引擎的差异,而且升级 JS 引擎的时候不会再影响到用户代码,用户可以无负担享受 JS 引擎不停升级带来的性能优化(V8, JSC 等 JS 引擎的迭代更新非常快)
- 学习 JSB 绑定技术不再需要依赖 Spidermonkey 或任何一个 JS 引擎的 C++ API 了(JS 引擎升级版本过程中 API 变动非常频繁),只要熟悉我们的绑定层 API 即可工作,我们也会尽可能保障绑定层 API 的稳定
总的来说,这种架构将是未来很长一段时间內 Creator 原生引擎的根基,支持我们快速得迭代引擎功能,稳步提升引擎质量。
绑定层 API 文档
测试注意事项
我建议原生项目都尝试升级到 v1.7,当然,目前仍然是内测版本,如果测试过程中遇到任何问题,我们都会尽全力解决
需要注意的是,如果你之前的项目有做过原生引擎定制,或者自己生成过绑定代码,需要仔细阅读下上面的绑定层 API 文档,使用工具重新生成绑定,或者重写手动绑定代码。
遇到任何问题,请回复此帖或者内测版发布帖,我和 @dumganhar 都会尽力处理
最后,愿意帮助我们测试的,麻烦移步内测版发布帖下载(今天内应该会出 beta 2),感激不尽!
