守望者--AIR技术交流
标题: 一个方法告诉你as3的removeChild性能有多烂 [打印本页]
作者: 破晓 时间: 2015-5-29 09:31
标题: 一个方法告诉你as3的removeChild性能有多烂
本帖最后由 破晓 于 2015-5-29 09:33 编辑
其实as3这个坑我早就踩过,不过那时没太注意,最近把项目的removeChild干掉换成了visible=false,发现效率质的提升……
先贴一下代码吧
- private function testRemoveChild():void
- {
- var startTime:int = getTimer();
- var count:int = 9999;
- for (var i:int = 0; i < count; i++)
- {
- var sp:Sprite = new Sprite();
- addChild(sp);
- }
-
- trace("创建对象计算用时",getTimer()-startTime,"毫秒");
-
- startTime = getTimer();
- while(this.numChildren)
- this.removeChildAt(this.numChildren-1);;
- // while(this.numChildren)
- // this.removeChildAt(0);
-
- trace("移除对象计算用时",getTimer()-startTime,"毫秒");
- }
复制代码 输出创建对象计算用时 95 毫秒
移除对象计算用时 4317 毫秒
这个测试很简单,不过却看出一点,如果场景上有对象进进出出的话……光removeChild就吃掉了一截cpu。
adobe这吭一直到现在都没填好,也不怪苹果说它懒了。
为了解决removeChild吃性能的问题,我用了visible=false+对象池代管理来解决。
发现fps确实提高了,但是真正的解决还需要一个条件就是flash player10.3…… 上一张论坛里找到一帖子,原话是这样的"话说 AS3 中,在舞台外的某显示对象的 visible 设为 false,之后其是否还会被重绘的问题,发现有不少兄弟还搞不太清。
故在此做下说明:Flash Player 10.3 以前的版本仍然会重绘,10.3 以后的版本就不会再被重绘了。请大家注意!"
| 欢迎光临 守望者--AIR技术交流 (http://www.airmyth.com/) |
|