提高flex应用性能方法(二)

1. 不要使用new操作符创建数组,应使用 
var a = []; 
而不是: 
var a = 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. 从数组中读取元素的速度是为元素赋值速度的2倍: 
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.将应用生命周期都不会改变的属性声明为常量: 
public const APPLICATION_PUBLISHER : String = "Company, Inc."; 
8. 当确定一个类不会派生子类时,应使用final修饰符: 
public final class StringUtils 
9. 在ActionScript3中,方法和变量的长度不会对性能造成影响: 
someCrazyLongMethodNameDoesntReallyImpactPerformanceTooMuch(); 
10. 在一行代码中进行多个变量赋值不会提高性能: 
var i=0; j=10; k=200; 
11. 使用if语句和switch语句无内存开销的差异: 
if ( condition ) 

     // handle condition 

使用switch语句: 
switch ( condition ) 

     case "A": 
         // logic to handle case A 
     break; 
      
     case "B": 
         // logic to handle case B  
     break; 

12.使用if语句时,尽可能地按照最有可能发生的情况的顺序进行判断和处理: 
if ( conditionThatHappensAlot ) 

     // logic to handle frequently met condition 

else if ( conditionThatHappensSomtimes )  

     // handle the case that happens occaisonally 

else  

     // handle the case that doesn’t happen that often 

13. AVM 在循环体内部进行计算时,将整型(int)数据提升为浮点型Number进行处理(从版本9到版本10,Actionscript虚拟机已经有所改变,int,uint,number之间的转换速度不再像之前慢了)
14. 要解决类型转换,就要先解决未知和不正确的对象类型
15. 谨慎使用unit,他可能会较慢(从版本9到版本10,Actionscript虚拟机已经有所改变,int,uint,number之间的转换速度不再像之前慢了) 
var footerHex : uint = 0x00ccff; 
16. 应在for循环中使用int: 
(var i: int = 0; i < n; i++) NOT for (var i: Number = 0; i < n; i++) 
17. 不要用int类型来表示小数,应使用: 
var decimal : Number  = 14.654; 
而不是:  
var decimal : int  = 14.654; 
18. 乘法效率高于除法: 不要用 5000/1000 而是: 5000*0.001 
19. 如果一个值是通过for或者while语句循环多次计算出来的(或者其他耗费较高性能才能得到的值),而且这个值需要在局部多次使用,那么应当在本地将值存储,而不是每次访问该值时重新计算):
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. 使用正则表达式RegEx进行校验,使用字符串的方法进行查找: 
// 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.尽量重用对象来保持”内存平衡”,这些对象包括DisplayObjects,URLLoader等. 
23. 遵循flex组件模式(失效机制): 
createChildren(); 
commitProperties(); 
updateDisplayList(); 
24. 把使用DataGrid组件作为最后的显示手段(如果确信真的没有办法使用常规的手段来实现想要的功能,才使用DataGrid) 
25. 避免将Repeaters用于能够滚动的数据 
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. 避免在标签内嵌套Vbox容器(消除冗余) 
<mx:Panel> 
    <mx:Label text="Label 1" /> 
    <mx:Label text="Label 2" /> 
</mx:Panel> 
<mx:Panel> 
     <mx:VBox> 
        <mx:Label text="Label 1" /> 
        <mx:Label text="Label 2" /> 
    </mx:VBox> 
</mx:Panel> 
31. 在mx:Application标签内部尽量避免使用Vbox标签(消除冗余).应当使用: 
<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx=http://www.adobe.com/2006/mxml> 
    <mx:Label text="Label 1" /> 
    <mx:Label text="Label 2" /> 
</mx:Application> 
而不是: 
<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx=http://www.adobe.com/2006/mxml> 
    <mx:VBox> 
        <mx:Label text="Label 1" /> 
        <mx:Label text="Label 2" /> 
    </mx:VBox> 
</mx:Application> 

32.设置Repeater的recycleChildren的属性为true可以提高Repeater对象的性能(重新利用已创建的子组件而不是再创建一个新的子组件) 
<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. 应用的frameRate应设为60fps以内 
<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx=http://www.adobe.com/2006/mxml  
    frameRate="45"> 
</mx:Application> 
34. 避免在一帧中进行过多的显示操作
35. 对于重复的操作,应使用ENTER_FRAME事件替代Timer事件:
public function onEnterFrame( event : Event ) : void 


private function init() : void 

     addEventListener( Event.ENTER_FRAME, onEnterFrame ); 

而不是: 

public function onTimerTick( event : Event ) : void 


private function init() : void 

     var timer : Timer = new Timer(); 
     timer.start(); 
     timer.addEventListener( TimerEvent.TIMER, onTimerTick ); 

36. 在多帧中延迟对象的创建,使用: 
<mx:Container creationPolicy="queued"/>  
37. 使组件不可见时使用Alpha=0与visiable=false不是一回事(对象被标记为不可见将不会被(渲染与布局)处理),应当使用:
loginButton.visible = false; 
而不是: 
loginButton.alpha = 0; 
Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值