原文:http://www.rozengain.com/blog/2007/05/01/some-actionscript-30-optimizations/
我一直在研究ActionScript优化并且得到了一些有趣的成果。这里并没有多少新的东西,许多都能从我最下面引用的文章找到。
数组索引
让我们通过一个数组的简单循环开始:
private function method1() : void
{
var tmpVar:int;
for(var i:Number=0; i<testArray.length; i++)
{
tmpVar = testArray[i];
}
}
通过该方法50次循环,我们得到的平均运行时间是53.34毫秒。现在我们将变量类型Number改为int:
for(var i:int=0; i<testArray.length; i++)
由此得到的平均运行时间为35.58毫秒。这是由于用整形作为数组的索引运行起来会更快。我们也可以将数组长度存放于循环外部来进一步提高运行速度。
var l:int = testArray.length;
for(var i:int=0; i<l; i++)
时间花费:21.6毫秒!
来自其他类里的常量
在使用其他类里的常量时我发现有一个优化方法。以下面这段代码为例:
var tmpVar:int;
for(var i:Number=0; i<100000; i++)
{
tmpVar = SomeClass.SOME_CONSTANT;
}
需要运行时间为34.08毫秒。如果我们将常量使用放到循环外部,像这样:
var tmpVar:int;
var myConstant:int = SomeClass.SOME_CONSTANT;
for(var i:Number=0; i<100000; i++)
{
tmpVar = myConstant;
}
现在只消耗了15.8毫秒。
初始化变量
以下方法初始化变量:
for(var i:int=0; i<100000; i++)
{
var v1:Number=10;
var v2:Number=10;
var v3:Number=10;
var v4:Number=10;
var v5:Number=10;
}
花费46.52毫秒。我们可以使用一个"var"关键字将变量声明在一行里,例如:
for(var i:int=0; i<100000; i++)
{
var v1:Number=10, v2:Number=10, v3:Number=10, v4:Number=10, v5:Number=10;
}
平均运行时间为19.74毫秒。
位运算符
位运算符也可以提高性能。以乘法运算和除法运算作为
for(var i:int=0; i<100000; i++)
{
var val1:int = 4 * 2;
var val2:int = 4 * 4;
var val3:int = 4 / 2;
var val4:int = 4 / 4;
}
平均时间:49.12毫秒,使用位运算符可以减到35.56毫秒:
for(var i:int=0; i<100000; i++)
{
var val1:int = 4 << 1;
var val2:int = 4 << 2;
var val3:int = 4 >> 1;
var val4:int = 4 >> 2;
}
这仅仅是九牛一毛。更多关于该主题的内容可以通过以下文章了解:
- AS3 optimations & suggestions
- ActionScript 3.0 and AVM2: Performance Tuning
- gskinner.com: gBlog: Types in AS3: ints not so fast, uints slow!
- Actionscript optimization resources
- More performance tuning in Actionscript 3
- Bitwise gems – fast integer math
- AS3 and AVM Performance Tuning tips from Gary Grossman
- AS3: Rethink your old assumptions
- Fast and accurate sine/cosine approximation
- Optimizations for AS3 calculations
- Fast Flash9 Fixed Point Sine
- AS3 Interesting Numeric Storage Behavior
- Flex RIA Performance Considerations Part 1: Getting Started
- Boost memory performance on data structures using
- HashMapCollection API
- Flash AS3 optimization – Fastest way to copy an array
- Making dispatchEvent More Efficient
- ActionScript 3 Vector / Array Performance Comparison
- ActionScript 3 Performance Tester
- Excellent article about benchmarking
- Top Ten ActionScript Performance Tips
- Tips on how to write efficient AS3 – part 1
- Tips on how to write efficient AS3 – part 2
- AS3 Performance Testing Harness
- Joa Ebert: Code Optimization
- LinkedGrid
- LinkedList
- Flex Databinding Performance