来自:
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{}; |