Flash 以下哪些选项将导致更好/更高性能的ActionScript代码?

Flash 以下哪些选项将导致更好/更高性能的ActionScript代码?,flash,actionscript-3,actionscript,Flash,Actionscript 3,Actionscript,我一直在阅读关于代码优化(更准确地说,是ActionScript3的代码优化)的文章,我有几个问题 负循环(即在循环中向后计数并检查是否达到零)和foreach循环哪个更好?这两个选项似乎都比正常的“for”循环好,但哪一个更快 使用数字或整数哪个更好 常数真的会降低你的表现吗 我试着自己编写一个简单的代码并测试它们,但是结果到处都是,我访问的一些网站有一些相互矛盾的观点 1) 负循环(即在循环中向后计数)哪一个更好 并检查是否达到零)或foreach循环。这两种选择似乎都是可行的 比普通的“f

我一直在阅读关于代码优化(更准确地说,是ActionScript3的代码优化)的文章,我有几个问题

  • 负循环(即在循环中向后计数并检查是否达到零)和foreach循环哪个更好?这两个选项似乎都比正常的“for”循环好,但哪一个更快

  • 使用数字或整数哪个更好

  • 常数真的会降低你的表现吗

  • 我试着自己编写一个简单的代码并测试它们,但是结果到处都是,我访问的一些网站有一些相互矛盾的观点

    1) 负循环(即在循环中向后计数)哪一个更好 并检查是否达到零)或foreach循环。这两种选择似乎都是可行的 比普通的“for”循环更好,但我想知道哪个更快 那两个呢

    这完全取决于你的逻辑。如果你有一个退出条件,当递减时会很快得到满足,那么负的就是你的选择。至于forEach,我认为这取决于您如何使用它。以以下为例:

    A

    var vec:Vector.<String> = new Vector.<String>();
    vec.forEach(function(s:String, idx:int, v:Vector.<String>):void {
        trace(s);
    });
    
    var-vec:Vector.=新向量();
    forEach(函数(s:String,idx:int,v:Vector.):void{
    痕迹;
    });
    
    B

    function onIteration(s:String, idx:int, v:Vector.<String>):void {
        trace(s);
    }
    var vec:Vector.<String> = new Vector.<String>();
    vec.forEach(onIteration);
    
    函数(s:String,idx:int,v:Vector。):void{
    痕迹;
    }
    变量向量:向量新向量();
    向量forEach(非对称性);
    
    A中,除非Flash编译器进行了一些惊人的优化(我很确定它没有),否则每次迭代都会创建一个新的匿名函数,这显然比简单的
    for
    循环要昂贵

    B已经定义了函数,因此它只是函数调用的额外查找。我假设这个循环和正常的
    for
    循环之间的性能差异是最小的,如果存在的话(不过我还没有分析它)

    2) 使用数字或整数哪个更好

    这取决于你的具体情况。如果需要浮点数,请使用
    number
    。否则,请使用
    int
    。如果您的值永远不会为负值,请使用
    uint
    。我假设使用
    int
    s和
    uint
    s进行AVM2计算会比
    Number
    更快,因为没有发生浮点运算,但我没有对其进行分析,所以我不能100%确定

    3) 常数真的会降低你的表现吗

    关于这个问题我从来没有听说过。我看不出它是如何使变量成为只读的。如果有任何区别,那几乎没有区别

    1) 负循环(即在循环中向后计数)哪一个更好 并检查是否达到零)或foreach循环。这两种选择似乎都是可行的 比普通的“for”循环更好,但我想知道哪个更快 那两个呢

    这完全取决于你的逻辑。如果你有一个退出条件,当递减时会很快得到满足,那么负的就是你的选择。至于forEach,我认为这取决于您如何使用它。以以下为例:

    A

    var vec:Vector.<String> = new Vector.<String>();
    vec.forEach(function(s:String, idx:int, v:Vector.<String>):void {
        trace(s);
    });
    
    var-vec:Vector.=新向量();
    forEach(函数(s:String,idx:int,v:Vector.):void{
    痕迹;
    });
    
    B

    function onIteration(s:String, idx:int, v:Vector.<String>):void {
        trace(s);
    }
    var vec:Vector.<String> = new Vector.<String>();
    vec.forEach(onIteration);
    
    函数(s:String,idx:int,v:Vector。):void{
    痕迹;
    }
    变量向量:向量新向量();
    向量forEach(非对称性);
    
    A中,除非Flash编译器进行了一些惊人的优化(我很确定它没有),否则每次迭代都会创建一个新的匿名函数,这显然比简单的
    for
    循环要昂贵

    B已经定义了函数,因此它只是函数调用的额外查找。我假设这个循环和正常的
    for
    循环之间的性能差异是最小的,如果存在的话(不过我还没有分析它)

    2) 使用数字或整数哪个更好

    这取决于你的具体情况。如果需要浮点数,请使用
    number
    。否则,请使用
    int
    。如果您的值永远不会为负值,请使用
    uint
    。我假设使用
    int
    s和
    uint
    s进行AVM2计算会比
    Number
    更快,因为没有发生浮点运算,但我没有对其进行分析,所以我不能100%确定

    3) 常数真的会降低你的表现吗

    关于这个问题我从来没有听说过。我看不出它是如何使变量成为只读的。如果有任何差异,它几乎是零。

    “1)负循环(即循环中向后计数并检查是否达到零)或foreach循环哪个更好?这两个选项似乎都比正常的“for”循环好,但这两个选项中哪一个更快?”

    对于foreach,我假设你的意思是for..每个或for..在循环中。正如Demian指出的,forEach相当缓慢。对于其他人来说,做一个简单的For循环总是更快(我认为除了forEach之外,你可以提前退出所有循环),只要在你需要的时候返回即可)。不管你是使用i++还是i--都没有区别。不过,for..each和for..in循环都有其优点。for..in是您可以循环浏览
    字典
    对象
    对象的唯一方法,而for..in则为您执行强制转换,这意味着您编写的代码更少。例如:

    for each( var s:Sprite in this.m_mySpriteVector )
        ...
    
    vs

    var len:int=this.m_mypritevector.length;
    对于(变量i:int=0;i
    (另一方面,如果你正在做一个正常的for循环,那么去掉长度是加速它的最好方法)。还要注意,for循环中的速度差只有在它们是大循环时才真正重要。如果你在做一个10的循环,那么它就不是真的