zoukankan      html  css  js  c++  java
  • 一个方法告诉你as3的removeChild性能有多烂

    其实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 以后的版本就不会再被重绘了。请大家注意!"

    最后我总结一个提高性能的方案,用LRU对象池+visible=false管理,完美提高运行效率。

  • 相关阅读:
    [转]ARM平台下独占访问指令LDREX和STREX
    ARM MMU
    在字符串中查找子字符串并提取它
    获得字符串的长度
    连接字符串
    循环用于迭代数组中的项目
    循环的标准
    if ... else 语句
    添加一个图像切换器
    css 中的z-index
  • 原文地址:https://www.cnblogs.com/pelephone/p/as3-removeChild.html
Copyright © 2011-2022 走看看