`
wesleysong
  • 浏览: 21881 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

Flex/AS优化细节

阅读更多
自己翻译的,原文见此:
http://insideria.com/2009/04/51-actionscript-30-and-flex-op.html

1.在创建新的Array的时候尽量不要使用new
使用
var a = []; 

而不是
var a = new Array();  


2.创建Array非常消耗资源,建议保守使用

3.复制Array最快的方法是:
var copy : Array = sourceArray.concat();    


4.对Array中元素赋值是很慢的
employees.push( employee ); 
employees[2] = employee;


5.取得Array中元素的值比赋值快一倍
var employee : Employee = employees[2];


6.将不需要对象实例的方法设置为静态(static)
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.方法/变量/常量的名字长度不会影响性能(在其它语言中往往并非如此)

someCrazyLongMethodNameDoesntReallyImpactPerformanceTooMuch();


10.将一些元素在同一行中赋值不会提升性能(在其它语言中往往并非如此)


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的条件进行排序,最经常遇到的情况放在前面
 
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,不过AVM也在变化,现在int/uint向Number的转换没有之前那么慢了

14.正确处理未知、不正确的Object类型极其转换

15.保守使用uint,因为它非常慢,不过VM也在改进,对uint的处理速度也在不断提升
 
var footerHex : uint = 0x00ccff; 


16. 在循环条件中使用int
使用
 
(var i: int = 0; i < n; i++)

而不是
 
for (var i: Number = 0; i < n; i++) 


17.不要把浮点数赋给int变量
var decimal : Number  = 14.654; 

而不是
var decimal : int  = 14.654; 


18.尽量使用乘法运算代替除法运算

如:使用5000*0.001来代替5000/1000

19.循环体中经常用到的函数或计算可放在循环体外

使用
for (..){ a * 180 / Math.PI; } 

不如在外边声明
toRadians = a*180/Math.PI;


20.在循环中避免计算或者调用函数

最典型的应用莫过于使用:
 
var len : int = myArray.lengh;  
for (var i=0;i<len;i++){} 
 

而不是:
  
for (var i=0;i< myArray.lengh;i++){ }


21.使用RegEx来进行验证,使用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. 重用诸如 DisplayObjects, URLLoader 一类的对象来维持“内存平稳”

23. 遵循Flex组件模型:
  
createChildren(); 
commitProperties(); 
updateDisplayList(); 


24. 在没有其它办法的情况下再使用DataGrid。你确信它不能用List实现吗?

25. 避免对可串行查看的数据使用Repeater

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以提升性能
 
<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. 避免每帧同时改变多个显示对象

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 不等同于 visible = false
visible置false的对象被从显示列表中移除了


使用
 
loginButton.visible = false; 

而不是
 
loginButton.alpha = 0; 

2
0
分享到:
评论

相关推荐

    flex加载as2写的swf,内容是一个很雷的网页游戏AD

    在本文中,我们将深入探讨如何在Flex应用中加载由ActionScript 2(AS2)编写的SWF文件,以及这背后的原理和技术细节。Flex是一种基于Adobe Flash Platform的开放源码框架,主要用于构建富互联网应用程序(RIA)。而...

    flex优化全集 flex优化全集

    根据提供的标题、描述、标签及部分内容,我们可以总结出与Flex优化相关的多个知识点。这些知识点主要集中在提高Flex应用程序的性能上,涉及代码优化、资源管理、数据处理等方面。 ### Flex优化全集 #### 1. 数组...

    Flex 翻页效果实例

    在描述中提到的链接(http://www.rubenswieringa.com/code/as3/flex/Book/)提供了一个具体的示例,演示了如何在Flex中实现书籍翻页效果。这个例子可能包括以下关键组成部分: 1. **组件设计**:为了实现翻页效果,...

    flex as3 元数据标签综合

    ### Flex AS3 元数据标签综合解析 #### 一、元数据标签概述 在Flex与AS3(ActionScript 3)开发中,元数据标签(Metadata Tags)是一种重要的语法结构,用于向编译器提供有关类或成员的额外信息。这些标签能够帮助...

    flex as3 programming pdf

    通过本指南的学习,您将能够熟练掌握Flex和ActionScript 3.0的核心概念和技术细节,从而有效地开发出高质量的应用程序。无论是初学者还是经验丰富的开发者,都可以从中受益匪浅。随着技术的不断进步和发展,Adobe ...

    flex和hibernate的整合

    以上是Flex和Hibernate整合的主要方面,实际开发中还需要结合具体项目需求进行调整和优化。通过深入理解和熟练掌握这些技术,开发者可以构建出高效、健壮的Flex-Hibernate应用程序。在提供的链接中,博主 ...

    AS3分享:FLEX开发者必备的十多个工具

    8. **最佳实践**:可能会分享一些Flex和AS3开发的最佳实践,如模块化设计、性能优化、错误处理和资源管理。 尽管原始描述没有提供具体信息,但通过对压缩包文件的分析,我们可以推测博主可能详细介绍了这些工具和...

    Flex Builder

    日志记录是跟踪应用程序运行时状态的有效手段,它可以帮助开发者了解程序执行的细节,找出潜在的错误和性能瓶颈。在Flex Builder中,输出日志到不同的位置可以帮助我们更好地组织和分析日志信息。 首先,我们可以将...

    Flex上传文件与下载

    ### Flex与Servlet结合实现文件上传及下载功能 在Flex与Servlet技术结合的背景下,本文将详细介绍如何通过这两种技术实现文件的上传与下载功能。...此外,还可以进一步优化用户体验,例如增加错误处理机制、美化UI等。

    flex 分页

    为了优化用户体验,这些组件不一次性加载所有数据,而是分批加载,每次只显示一部分,这就是分页的作用。用户可以通过点击“上一页”、“下一页”等按钮来切换页面。 在提供的文件列表中,我们看到一些可能与分页...

    Flex中实现多行tab的源代码

    在Flex开发中,创建用户界面时,我们常常会遇到需要展示多行Tab导航的情况。默认情况下,Flex的TabNavigator组件的TabBar控件只会在一行内显示Tab项,但通过...记住,良好的用户体验往往来源于对细节的关注和优化。

    最新的flex流程图源码

    解压此文件后,你可以看到源代码文件(可能包括.as或.mxml),这些文件展示了流程图组件的实现细节,包括图形绘制、事件处理、数据绑定等方面。通过阅读和学习这些源代码,开发者可以学习如何在Flex环境中创建动态、...

    flex 超强3D Demo,令人震撼!

    3D功能在Flash中主要通过AS3(ActionScript 3)实现,而日本人在这个领域表现出色,他们以细腻的工艺和对细节的关注著称,所以这个Demo的精良程度不言而喻。 “zhenhan”可能是指这个Demo的开发者或者是一个特定的...

    Flex如何使用JAVA对象连接SQLServer数据库.rar

    同时,避免在客户端暴露过多数据库操作细节,以提高应用的安全性。 通过以上步骤,你可以在Flex应用中利用Java对象有效地连接到SQL Server数据库,实现数据的动态交互。在实际开发中,还需要根据具体业务需求调整和...

    一些不错的开源Flex项目.txt

    - 性能优化:针对Flex应用进行了性能优化,提升运行效率。 #### 七、Open Source Flex Component: TreeMap - **网址**:http://www.zeuslabs.us/2007/11/14/open-source-flex-component-treemap/ - **简介**:一...

    Flex实现自动过滤ComboBox

    这个基本的实现只是一个起点,实际应用中可能需要考虑更多的细节,例如处理空输入、优化过滤性能、添加延迟过滤以减少不必要的计算等。此外,你还可以根据需求调整过滤函数,比如根据多个字段进行过滤,或者使用正则...

    Flex_3_with_Java Flex_3_with_Java

    通过他的工作和博客,Satish 分享了许多关于 Flex 和 Java 集成开发的经验和技术细节。 --- 通过以上对《Flex 3 with Java》这本书的介绍和分析,我们可以看出本书旨在帮助开发者全面了解如何使用 Flex 3 和 Java ...

    FLEX个人网站管理系统源码v3.1source.rar

    综上所述,这个源码包提供了一个基于Flex技术的个人网站管理系统,通过MXML和AS3实现了富交互的前端,结合Cairngorm MVC框架优化了代码结构,利用AMFPHP实现了高效的数据通信,是学习和研究FLEX应用开发的好素材。

    Flex里播放Gif图片

    4. 使用组件:在Flex界面布局中,通过MXML或AS3代码实例化并添加这个Gif播放器组件。 接下来,`md.gif`文件很可能是用来测试`gifplayer.swf`组件的一个Gif示例。在实际应用中,开发者会将这个组件与自己的Gif文件...

Global site tag (gtag.js) - Google Analytics