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