来自:
http://www.experts-exchange.com/Software/Photos_Graphics/Web_Graphics/Macromedia_Flash/A_2107-20-Tips-to-Optimize-your-ActionScript.html
如何计算代码消耗的时间
var start:Number = getTimer();
for(var i:int=0;i<1000;i++){
// statements to evaluate
}
trace(start-getTimer());
优化20条
faster | slower | |
多个条件比堆叠条件要快 | if(var1) if(var2) if(var3) | if(var1 && var2 && var3) |
直接写数值比new构造器快 | var list:Array = [1,2,3]; | var list:Array = new Array(1,2,3); |
for循环比while快 | for(var i:int=0;i<1000;i++) | var i:int=0; |
in操作符比hasOwnProperty快 | prop in Object | Object.hasOwnProperty("prop") |
尽量少用”.” | var var1:Number = container.child.x; | textfield.text = container.child.x; |
公有对象代替动态类 | public class MyObject{ | public dynamic class MyObject{ |
部署到enterframe上 | update()放到enterframe上 | update()放到timer上 |
字符串方法比正则表达式快 | var parts:Array = longString.split("|"); | var parts:Array = longString.match(/(.*?)\|/gm); |
用文本text代替xml | var txt:String=”” | var xml=new XML() |
尽量处理堆顶数据 | MyArray.push(myVar); | MyArray.shift(myVar); |
enterframe比timer和intervals都快 | addEventListener("enterFrame",myFunc); | myTimer.addEventListener("timer",myFunc); |
使用局部变量 | function getMinutes(){ | var myVar:uint = 6000; |
常量比变量快 | const URL:String = "http://www.experts-exchange.com"; | var URL:String = "http://www.experts-exchange.com"; |
使用as操作符代替强制类型转换 | var child:MyClass = event.currentTarget as MyClass; | var child:MyClass = MyClass(event.currentTarget); |
E4X真的很慢, 虽然鼓吹节省开发时间 | for each(var node:XML in myXML){ | var nodes:XMLList = myXML.(@myProp=="value").(@anotherProp==12); |
int比number快 | for(var i:int=0;i<10000;i++) | for(var i:Number=0;i<10000;i++) |
尽可能使用位操作更快 | var n:Number = 93745298347.230498; | var n:Number = 93745298347.230498; |
使用数组连接代替字符串连接 | var myArray:Array = []; | var myString:String = ""; |
循环中固定不变的参数尽量不要用变量来使用 | var l:uint = myArray.length; | for(var i:int=0;i<myArray.length;i++) |
尽可能使用静态方法 | private static function myFunc():void{}; | private function myFunc():void{}; |