zoukankan      html  css  js  c++  java
  • flex优化全集

    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 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 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 );
     
     

    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; 
  • 相关阅读:
    Compiling Open Source Software for UNIX using Configure Script
    vlcandroid 移植live555到android
    xcode中armv6与armv7的困惑
    ZOJ 3204 Connect them (最小生成树,输出字典序最小的解)
    POJ 3133 Manhattan Wiring (插头DP)
    HDU 4419 Colourful Rectangle 第37届ACM/ICPC 杭州赛区网络赛 1010题 (线段树)
    HDU 3829 Cat VS Dog (二分匹配求最大独立集)
    最大流模板(SAP算法)(邻接表形式)
    HDU 4417 Super Mario 第37届ACM/ICPC 杭州赛区网络赛第1008题 (划分树)
    ZOJ 3203 Light Bulb (数学直接推公式 或者 三分法)
  • 原文地址:https://www.cnblogs.com/czjone/p/1834653.html
Copyright © 2011-2022 走看看