cocos2d-JS 性能优化 - 对象缓冲池 ( cc.pool )
2017-03-02 20:39
483 查看
对象缓冲池 ( cc.pool ) :
作用 :优化创建效率 , 尤其是针对需要多次创建的情况 .
缓冲池 API :
缓冲池 ( cc.pool ) 提供的函数并不多 , 只有5个 .
cc.pool.putInPool(obj); //将对象放入缓冲池 cc.pool.hasObject(objClass); //判断缓冲池是否存在可用的指定对象 cc.pool.removeObject(obj); //删除指定对象 cc.pool.getFromPool(objClass); //从缓冲池获取指定对象 cc.pool.drainAllPools(); //清空缓冲池
用法 :
创建一个对象类 (Hero) , 添加两个函数 , unuse 和 reuse , 重点要注意的是 , unuse 里面的 retain 方法 , 没有的话 , 对象可能会被系统回收 .
var Hero = cc.Sprite.extend({ _hp:null, _mp:null, ctor: function(hp,mp){ this._super("res/box.png"); this.initData(hp,mp); }, initData: function(hp,mp){ this._hp = hp; this._mp = mp; }, unuse: function(){ this._hp = 0; //属性清空 this._mp = 0; this.retain(); //保存 防止被回收 this.removeFromParent(); }, reuse: function(hp,mp){ this.initData(hp,mp); } });
添加创建Hero 函数 .
var CreateHero = function(hp,mp){ if(cc.pool.hasObject(Hero)) //判断缓冲池里 是否存在 Hero对象 { cc.log('取出'); return cc.pool.getFromPool(Hero,hp,mp); // 从缓冲池里取出 Hero对象 } else { cc.log('新创建'); return new Hero(hp,mp) } };
先预先将5000个Hero对象放入缓冲池 , 然后我将连续创建5000个Hero的总耗时 和 预先将Hero放入缓冲池再取出5000个的总耗时做一个对比 .
var HelloWorldLayer = cc.Layer.extend({ ctor:function () { this._super(); this.preparHeroPool(); //预先将5000个Hero放入缓冲池 this.create(1); //第一轮 从对象池取出5000个 this.create(2); //第二轮 新创建5000个 }, create: function(num){ var time = new Date().getTime(); for(var i = 0; i < 5000; i++) { var hero = CreateHero(1,2); hero.setPosition(cc.winSize.width/2, cc.winSize.height/2); this.addChild(hero); } var totleTime = new Date().getTime() - time; cc.log("第 "+num+" 轮总耗时 = ",totleTime); }, preparHeroPool: function(){ for(var i = 0; i < 5000; i++) { var node = new Hero(0,0); cc.pool.putInPool(node); } }, });
结果 :
一次不能说明问题 , 再做一次测试 .
从结果上来看 , 的确是存在性能差异的 .
相关文章推荐
- cocos2d-JS 性能优化 - 对象缓冲池 ( cc.pool )
- Cocos2d-JS 精灵的性能优化
- Cocos2d-Js中创建对象都使用new 对象,而且每个对象前面都要加cc.例如
- Cocos2d-JS 性能优化
- CEPH RGW 设置 user default_placement为ssd-placement,优化100KB-200KB小文件性能,使用户创建的bucket对象放置到 SSD设备的Pool上。
- 【cocos2d-js官方文档】十二、对象缓冲池
- cocos2d JS-(JavaScript) cc.each循环遍历对象
- 【Cocos2d js系列】利用cc.RotateBy或者RotateTo旋转一个对象以后如何复原
- 【cocos2d-js官方文档】十二、对象缓冲池
- WP7 App性能优化(3):隐藏与显示对象
- js性能优化-事件委托
- JS性能优化框架
- cocos2d中CCProgressTimer对象不能显示的问题....
- JS性能优化
- 关于PLSQL性能调整的一点技巧关于dbms_shared_pool缓存对象的详细用法
- 性能优化:如何更快速加载你的JS页面
- 我所经历的JS性能优化
- 让js编程跟上浏览器改朝换代--性能优化
- JS性能优化框架
- JS 网站性能优化笔记