flex外包公司—技术分享:flex 优化技巧 收集[提升性能]
发布时间:2020-12-15 04:00:53 所属栏目:百科 来源:网络整理
导读:1、当创建一个数组的时候避免用new操作符,用 var a:Array = [];而不用var a:Array = new Array();? 2、快速的复制一个数组:? var copy : Array = sourceArray.concat ();? 3、设置一个数组的值是非常忙的:? employees.push ( employee ); employees[2] = e
1、当创建一个数组的时候避免用new操作符,用 var a:Array = [];而不用var a:Array = new Array();?
2、快速的复制一个数组:? var copy : Array = sourceArray.concat ();? 3、设置一个数组的值是非常忙的:? employees.push ( employee ); employees[2] = employee;? 4、从一个数组中取得值的速度是设置一个数组值的两倍快:? var employee : Employee = employees[2];? 5、当不需要一个类的实例的时候尽量用静态的属性或方法:? 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;? ? }? ?}? }? 6、在整个程序的生命周期中都不会改变的变量用const定义常量:?public const APPLICATION_PUBLISHER : String = "Company,Inc. ";? 7、当一个类不需要有子类的时候应该将该类声明为final类型的:? public final class StringUtils? 8、变量和方法的长度在As3中并不影响什么性能,但在别的语言中可能就有影响: someCrazyLongMethodNameDoesntReallyImpactPerformanceTooMuch();? 9、将语句写在一行上面并不会影响AS3程序的性能,但在别的语言中却有影响:? var i=0; j=10; k=200;? 10、在内存占用上面if语句和switch语句并没有什么区别:? 语句:? if ( condition ) {? // handle condition? }? 和语句:? switch ( condition ) {? case "A ": // logic to handle case A break ;? case "B ": // logic to handle case B break ;? 占用的内存是一样的.? 11、当你的程序处理分支较多的时候,你应该适当的排列他们出现的顺序,可以参照以下的方式进行:? if ( conditionThatHappensAlot ) {? //处理经常发生的业务逻辑? } else if ( conditionThatHappensSomtimes ) {? // 处理偶尔会发生的业务逻辑? } else {? // 处理几乎不会发生的情况? 12、Actionscript虚拟机(Flash Player)推荐在循环内部用int而不是number,但是flash Player10在flash Player9的基础上做了很多的改进,int,uint和number之间的转换不在像以前那么慢了。? 13、每个变量都应该声明一个确定的类型,解决那些没有指定类型的警告信息活错误信息。? 14、尽量少用unint,它可能会非常慢,但是Flashplayer10做了改进,速度不像以前那么慢了:? var footerHex : uint = 0x00ccff;? 15、循环遍历的时候用int类型:? for (var i: int = 0; i < n; i++)? 而不用:? for (var i: Number = 0; i < n; i++)? 16、在用decimal的时候用number而不用int:? var decimal : Number = 14.654;? var decimal : int = 14.654;? 17、用乘法代替除法:? 用100*0.01代替100/100? 18、在for和while循环中用到的计算应事先声明好,而不是在循环中重复声明.? for (..){ a * 180 / Math .PI ; } 应该在循环的外部申明: toRadians = a*180/Math .PI ;? 19、避免在循环中调用方法或计算:? var len : int = myArray.lengh; for (var i=0;i<len;i++){}? 而不要用:? for (var i=0;i< myArray.lengh;i++){ }? 20、用正则表达式进行字符串的校验,用String的方法进行字符串的查找:? // postal code validation example using regular expressions? private 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 );? 21、重复使用诸如DisplayObjects和URLLoaderReuse之类的物体,以保持"内存平稳".? 22、使用组件或创建自定义组件时应遵循Flex的组件模型,如下面的方法为组件创建时应先后调用的方法.? createChildren(); commitProperties(); updateDisplayList();? 23、尽量少用dataGrid这样的重量级的组件,除非你用一个常规的list无法实现你要的功能。? 24、避免用Repeater 控件创建scrollable数据.? 25、尽量避免使用setStyle()方法,这个方法在Flex框架里面是众多代价敖贵的方法之一。? 26、当你用过多的容器嵌套的时候会较低应用程序的性能:? <mx:Panel>? <mx:VBox>? <mx:HBox>? <mx:Label text ="Label 1 " />? <mx:VBox> <mx:Label text ="Label 2 " />? </mx:VBox>? <mx:Label text ="Label 3 " />? <mx:Label text ="Label 4 " />? </mx:HBox>? </mx:Panel>? 27、没有必要每次都用容器组件作为你自定义组件的父控件:? <mx:Image xmlns:mx="http://www.adobe.com/2006/mxml " source="avatar.jpg " width ="200 " height ="200 " />? 28、减少不必要的容器嵌套? 29、不要在Panel中vBox和HBox,用Panel的Layout属性就可以了? 30、不要在application标签下用HBox,和Vbox,道理和29一样? 31、设置recycleChildren为true来提高Repeater的性能 (重用已经创建过的children而不是重新创建一个新)? <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>? 32、将应用程序的帧率设置为60fps或者更低:? <?xml version ="1.0 " encoding="utf-8 "?>? <mx:Application xmlns:mx=http://www.adobe.com/2006/mxml frameRate="45 ">? </mx:Application >? 33、避免每一帧进行过多的显示操作.? 34、能用ENTER_FRAME事件就不用Timer事件.? public function onEnterFrame ( event : Event ) : void { }? private function init () : void {? addEventListener( Event.ENTER_FRAME,onEnterFrame );? public function onTimerTick( event : Event ) : void { }? var timer : Timer = new Timer();? timer.start ();? timer.addEventListener( TimerEvent.TIMER,onTimerTick );? 35、在多帧上面通过以下方式延迟物体的创建.? <mx:Container creationPolicy="queued "/>? 36、Alpha = 0并不是visible = false (设置为invisible的物体会被忽略,不作任何处理)? loginButton.visible = false ;? loginButton.alpha = 0;? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |