1、当创建一个数组的时候避免用new操作符用 var a:Array = [];而不用var a:Array = new Array();
2、传统的这样来简历数组的话代价是非常昂贵的:
var vanityCollection01 : Array = new Array();
var vanityCollection02 : Array = new Array();
var vanityCollection03 : Array = new Array();
var vanityCollection04 : Array = new Array();
3、快速的复制一个数组:
var copy : Array = sourceArray.concat();
4、设置一个数组的值是非常忙的:
employees.push( employee ); employees[2] = employee;
5、从一个数组中取得值的速度是设置一个数组值的两倍快:var employee : Employee = employees[2];6、当不需要一个类的实例的时候尽量用静态的属性或方法:StringUtils.trim( "text with space at end " ); Class definition: package { public final class StringUtils { public static function trim( s : String ) : String { var trimmed : String; // implementation... return trimmed; } } }7、在整个程序的生命周期中都不会改变的变量用const定义常量:public const APPLICATION_PUBLISHER : String = "Company, Inc.";8、当一个类不需要有之类的时候应该讲该类声明为final类型的:public final class StringUtils9、变量和方法的长度在As3中并不影响什么性能,但在别的语言中可能就有影响:someCrazyLongMethodNameDoesntReallyImpactPerformanceTooMuch();10、将语句写在一行上面并不会影响AS3程序的性能,但在别的语言中却有影响:var i=0; j=10; k=200;11、在内存占用上面if语句和switch语句并没有什么区别:语句:if ( condition ){// handle condition}和语句:switch ( condition ){case "A":// logic to handle case Abreak;case "B":// logic to handle case Bbreak;}占用的内存是一样的12、当你的程序处理分支较多的时候,你应该适当的排列他们出现的顺序,可以参照以下的方式进行:if ( conditionThatHappensAlot ){//处理经常发生的业务逻辑}else if ( conditionThatHappensSomtimes ){// 处理偶尔会发生的业务逻辑}else{// 处理几乎不会发生的情况}13、Actionscript虚拟机(Flash Player)推荐在循环内部用int而不是number,但是flash Player10在flash Player9的基础上做了很多多的改进,int,uint和number之间的转换不在像以前那么慢了。14、Resolve issues of promotion, unknown, or incorrect object types
(不太清楚怎么翻译,个人猜测是每个变量都应该声明一个确定的类型,解决那些没有指定类型的警告信息活错误信息)15、尽量少用unint,它可能会非常慢,但是Flashplayer10做了改进,速度不像以前那么慢了:var footerHex : uint = 0x00ccff;16、循环遍历的时候用int类型:(var i: int = 0; i < n; i++) NOT for (var i: Number = 0; i < n; i++)17、在用decimal的时候用number而不用int:var decimal : Number = 14.654; 而不用:var decimal : int = 14.654;18、用乘法代替除法:用100*0.01代替100/10019. Locally store function values in for and while statements instead of repeatedly accessing themfor (..){ a * 180 / Math.PI; }declare: toRadians = a*180/Math.PI; outside of the loop20、避免在循环中调用方法或计算:var len : int = myArray.lengh;for (var i=0;i<len;i++){}而不要用:for (var i=0;i< myArray.lengh;i++){ }21、用正则表达式进行字符串的校验,用String的方法进行字符串的查找:// postal code validation example using regular expressionsprivate var regEx:RegExp = /^[A-Z][0-9][A-Z] [0-9][A-Z][0-9]$/i;private function validatePostal( event : Event ) : void{if( regEx.test( zipTextInput.text ) ){// handle invalid input case}}// search a string using String methodsvar string : String = "Search me";var searchIndex : int = string.indexOf( "me" );var search : String = string.substring( searchIndex, searchIndex + 2 );22. Reuse objects to maintain a “memory plateau” DisplayObjects, URLLoader objects23. Follow the Flex component model:createChildren();commitProperties();updateDisplayList();24、尽量少用dataGrid这样的重量级的组件,除非你用一个常规的list无法实现你要的功能。25. Avoid Repeaters for scrollable data26、尽量避免使用setStyle()方法,这个方法在Flex框架里面是众多代价敖贵的方法之一。27、当你用过多的容器嵌套的时候会较低应用程序的性能:<mx:Panel><mx:VBox><mx:HBox><mx:Label text="Label 1" /><mx:VBox><mx:Label text="Label 2" /></mx:VBox><mx:HBox><mx:Label text="Label 3" /><mx:VBox><mx:Label text="Label 4" /></mx:VBox></mx:HBox></mx:HBox></mx:VBox></mx:Panel>28、没有必要每次都用容器组件作为你自定义组件的父控件:<mx:Image xmlns:mx="http://www.adobe.com/2006/mxml"source="avatar.jpg" width="200" height="200" />29、减少不必要的容器嵌套30、不要在Panel中vBox和HBox,用Panel的Layout属性就可以了31、不要在application标签下用HBox,和Vbox,道理和30一样32. Set the recycleChildren property to true to improve a Repeater object's performance
(re-uses previously created children instead of creating new ones)<mx:Script><![CDATA[[Bindable]public var repeaterData : Array = ["data 1", "data 2"];]]></mx:Script><mx:Repeater id="repeater" dataProvider="{repeaterData}"><mx:Label text="data item: {repeater.currentItem}"/></mx:Repeater>33、将应用程序的帧率设置为60fps活着更低:<?xml version="1.0" encoding="utf-8"?><mx:Application xmlns:mx=http://www.adobe.com/2006/mxmlframeRate="45"></mx:Application>34. Avoid multiple display manipulations per frame35. Code against ENTER_FRAME events instead of Timer eventspublic function onEnterFrame( event : Event ) : void{}private function init() : void{addEventListener( Event.ENTER_FRAME, onEnterFrame );}NOT:public function onTimerTick( event : Event ) : void{}private function init() : void{var timer : Timer = new Timer();timer.start();timer.addEventListener( TimerEvent.TIMER, onTimerTick );}36. To defer object creation over multiple frames use:<mx:Container creationPolicy="queued"/>37. Alpha = 0 is not the same as visible = false (Objects marked invisible are passed over)loginButton.visible = false;NOT:loginButton.alpha = 0;7、在整个程序的生命周期中都不会改变的变量用const定义常量:
public const APPLICATION_PUBLISHER : String = "Company, Inc.";
8、当一个类不需要有之类的时候应该讲该类声明为final类型的:
public final class StringUtils
9、变量和方法的长度在As3中并不影响什么性能,但在别的语言中可能就有影响:
someCrazyLongMethodNameDoesntReallyImpactPerformanceTooMuch();
10、将语句写在一行上面并不会影响AS3程序的性能,但在别的语言中却有影响:
var i=0; j=10; k=200;
11、在内存占用上面if语句和switch语句并没有什么区别:
语句:
if ( condition ) { // handle condition }
和语句:
switch ( condition ) {case "A": // logic to handle case A
break;case "B": // logic to handle case B break; }
占用的内存是一样的
12、当你的程序处理分支较多的时候,你应该适当的排列他们出现的顺序,可以参照以下的方式进行:
if ( conditionThatHappensAlot ) { //处理经常发生的业务逻辑
} else if ( conditionThatHappensSomtimes ) { // 处理偶尔会发生的业务逻辑
} else { // 处理几乎不会发生的情况
}
13、Actionscript虚拟机(Flash Player)推荐在循环内部用int而不是number,但是flash Player10在flash Player9的基础上做了很多
多的改进,int,uint和number之间的转换不在像以前那么慢了。
14、Resolve issues of promotion, unknown, or incorrect object types(不太清楚怎么翻译,个人猜测是每个变量都应该声明一个确定的类型,解决那些没有指定类型的警告信息活错误信息)
15、尽量少用unint,它可能会非常慢,但是Flashplayer10做了改进,速度不像以前那么慢了:
var footerHex : uint = 0x00ccff;
16、循环遍历的时候用int类型:
(var i: int = 0; i < n; i++) NOT for (var i: Number = 0; i < n; i++) 17、在用decimal的时候用number而不用int:
var decimal : Number = 14.654; 而不用:var decimal : int = 14.654;
18、用乘法代替除法:
用100*0.01代替100/100
19. Locally store function values in for and while statements instead of repeatedly accessing them
for (..){ a * 180 / Math.PI; } declare: toRadians = a*180/Math.PI; outside of the loop
20、避免在循环中调用方法或计算:
var len : int = myArray.lengh; for (var i=0;i<len;i++){}
而不要用:
for (var i=0;i< myArray.lengh;i++){ }
21、用正则表达式进行字符串的校验,用String的方法进行字符串的查找:
// postal code validation example using regular expressionsprivate var regEx:RegExp = /^[A-Z][0-9][A-Z] [0-9][A-Z][0-9]$/i;
private function validatePostal( event : Event ) : void {
if( regEx.test( zipTextInput.text ) ) {
// handle invalid input case } }
// search a string using String methods
var string : String = "Search me"; var searchIndex : int = string.indexOf( "me" );
var search : String = string.substring( searchIndex, searchIndex + 2 );
22. Reuse objects to maintain a “memory plateau” DisplayObjects, URLLoader objects
23. Follow the Flex component model: createChildren(); commitProperties(); updateDisplayList();
24、尽量少用dataGrid这样的重量级的组件,除非你用一个常规的list无法实现你要的功能。
25. Avoid Repeaters for scrollable data
26、尽量避免使用setStyle()方法,这个方法在Flex框架里面是众多代价敖贵的方法之一。
27、当你用过多的容器嵌套的时候会较低应用程序的性能:
<mx:Panel> <mx:VBox> <mx:HBox><mx:Label text="Label 1" />
<mx:VBox>
<mx:Label text="Label 2" />
</mx:VBox> <mx:HBox>
<mx:Label text="Label 3" /> <mx:VBox>
<mx:Label text="Label 4" /> </mx:VBox>
</mx:HBox> </mx:HBox>
</mx:VBox> </mx:Panel>
28、没有必要每次都用容器组件作为你自定义组件的父控件:
<mx:Image xmlns:mx="http://www.adobe.com/2006/mxml" source="avatar.jpg" width="200" height="200" />
29、减少不必要的容器嵌套
30、不要在Panel中vBox和HBox,用Panel的Layout属性就可以了
31、不要在application标签下用HBox,和Vbox,道理和30一样
32. Set the recycleChildren property to true to improve a Repeater object's performance(re-uses previously created children instead of creating new ones) <mx:Script> <![CDATA[
[Bindable]
public var repeaterData : Array = ["data 1", "data 2"];
]]> </mx:Script>
<mx:Repeater id="repeater" dataProvider="{repeaterData}">
<mx:Label text="data item: {repeater.currentItem}"/>
</mx:Repeater>
33、将应用程序的帧率设置为60fps活着更低:
<?xml version="1.0" encoding="utf-8"?><mx:Application xmlns:mx=http://www.adobe.com/2006/mxml frameRate="45">
</mx:Application>
34. Avoid multiple display manipulations per frame
35. Code against ENTER_FRAME events instead of Timer events public function onEnterFrame( event : Event ) : void { }private function init() : void { addEventListener( Event.ENTER_FRAME, onEnterFrame ); }
NOT:
public function onTimerTick( event : Event ) : void { } private function init() : void {var timer : Timer = new Timer(); timer.start(); timer.addEventListener( TimerEvent.TIMER, onTimerTick ); }
36. To defer object creation over multiple frames use: <mx:Container creationPolicy="queued"/>
37. Alpha = 0 is not the same as visible = false(Objects marked invisible are passed over)
loginButton.visible = false; NOT: loginButton.alpha = 0;