`

Flex优化技巧

    博客分类:
  • Flex
 
阅读更多

http://www.jb51.net/article/18260.htm

 

有些我不确定,需要验证。

 

 

 

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:HBox> 
<mx:Label text ="Label 3 " /> 
<mx:VBox> 
<mx:Label text ="Label 4 " /> 
</mx:VBox> 
</mx:HBox> 
</mx:HBox> 
</mx:VBox> 
</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 { } 
private function init () : 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; 
37、性能优化: 
内存释放优化原则 
1. 被删除对象在外部的所有引用一定要被删除干净才能被系统当成垃圾回收处理掉; 
2. 父对象内部的子对象被外部其他对象引用了,会导致此子对象不会被删除,子对象不会被删除又会导致了父对象不会被删除; 
3. 如果一个对象中引用了外部对象,当自己被删除或者不需要使用此引用对象时,一定要记得把此对象的引用设置为 null; 
4. 本对象删除不了的原因不一定是自己被引用了,也有可能是自己的孩子被外部引用了,孩子删不掉导致父亲也删不掉; 
5. 除了引用需要删除外,系统组件或者全局工具、管理类如果提供了卸载方法的就一定要调用删除内部对象,否则有可能会造成内存泄露和性能损失; 
6. 父对象立刻被删除了不代表子对象就会被删除或立刻被删除,可能会在后期被系统自动删除或第二次移除操作时被删除; 
7. 如果父对象 remove 了子对象后没有清除对子对象的引用,子对象一样是不能被删除的,父对象也不能被删除; 
8. 注册的事件 如果没有被移除不影响自定义的强行回收机制,但有可能会影响正常的回收机制,所以最好是做到注册的事件监听器都要记得移除干净。 
9. 父对象被删除了不代表其余子对象都删除了,找到一种状态的泄露代码不等于其他状态就没有泄露了,要各模块各状态逐个进行测试分析,直到测试任何状态下都能删除整个对象为止。 
内存泄露举例 : 
1. 引用泄露:对子对象的引用,外部对本对象或子对象的引用都需要置 null ; 
2. 系统类泄露:使用了系统类而忘记做删除操作了,如 BindingUtils.bindSetter() , ChangeWatcher.watch() 函数 时候完毕后需要调用 ChangeWatcher.unwatch() 函数来清除引用 ,否则使用此函数的对象将不会被删除; 
类似的还有 MUSIC , VIDEO , IMAGE , TIMER , EVENT , BINDING 等。 
3. 效果 泄露:当对组件应用效果 Effect 的时候,当本对象本删除时需要把本对象和子对象上的 Effect 动画 停止掉,然后把 Effect 的 target 对象置 null; 如果不停止掉动画直接把 Effect 置 null 将不能正常移除对象。 
4. SWF 泄露:要完全删除一个 SWF 要调用它的 unload() 方法并且把对象置 null; 
5. 图片泄露:当 Image 对象使用完毕后要把 source 置 null;( 为测试 ) ; 
6. 声音、视频 泄露 : 当不需要一个音乐或视频是需要停止音乐,删除对象,引用置 null; 
内存泄露解决方法: 
1. 在组件的 REMOVED_FROM_STAGE 事件回掉中做垃圾处理操作(移除所有对外引用(不管是 VO 还是组件的都需要删除),删除监听器,调用系统类的清除方法) 
先 remove 再置 null, 确保被 remove 或者 removeAll 后的对象在外部的引用全部释放干净 ; 
2. 利用 Flex 的性能优化工具 Profile 来对项目进程进行监控,可知道历史创建过哪些对象,目前有哪些对象没有被删除,创建的数量,占用的内存比例和用量,创建过程等信息 ;

分享到:
评论

相关推荐

    flex 优化技巧 收集[提升性能]

    ### Flex优化技巧详解 在Flex应用开发过程中,为了提高应用程序的性能和响应速度,开发者们总结了一系列有效的优化技巧。本文将详细介绍这些技巧及其背后的原理,帮助开发者更好地理解如何优化Flex应用。 #### 1. ...

    精通flex 官方源代码

    9. **Flex优化技巧**:学习如何减少组件加载时间,优化内存使用,提高应用程序的响应速度。 10. **Flex最佳实践**:从官方源代码中学习最佳的编程和设计习惯,提高代码质量和可维护性。 通过仔细研究这些内容,...

    flex优化全集 flex优化全集

    根据提供的标题、描述、标签及部分内容,我们可以总结出与Flex优化相关的多个知识点。...以上内容涵盖了Flex开发过程中常见的一些性能优化技巧。通过对这些技巧的理解和应用,可以显著提高Flex应用程序的性能。

    Flash,Flex和AIR应用开发内存监测及优化技巧

    内存监测及优化技巧可以帮助开发者更好地控制内存使用,避免内存泄漏和性能瓶颈。 首先,了解Flash Player如何分配内存是内存管理的基础。Flash Player通过虚拟机向操作系统申请内存,并以4096字节为单位的内存块在...

    Flex 开发技巧集

    Flex开发技巧集是一系列关于使用Flex进行开发时的实用技巧,可以帮助开发者提高效率,优化用户体验。以下是基于给定内容的一些重要知识点的详细说明: 1. **去除或改变Alert的模糊效果**:通过设置Panel的`...

    Flex 编程技巧

    Flex编程技巧涉及多种方法和技术,可以提高开发效率、优化用户体验,并解决常见编程问题。以下是从提供的文件中提取的Flex编程相关知识点。 1. 复制内容到剪贴板 在Flex中,可以通过ActionScript代码复制内容到剪贴...

    flex开发技巧整理.pdf

    Flex 开发技巧是提升开发效率和代码质量的关键。在 Flex 开发中,了解并掌握这些技巧可以帮助你更好地理解和控制应用程序的性能与外观。 1. 改变SWF尺度、背景颜色和帧频: 通过在“Navigator”窗口中右键点击项目...

    FLEX内存释放优化原则

    本文将针对“FLEX内存释放优化原则”进行深入探讨,帮助开发者掌握有效的内存管理技巧。 #### 二、核心优化原则 1. **删除对象前需通知系统** - 在删除对象之前,必须明确地告知系统即将进行的操作。这一步骤对于...

    Flex资料大全(Flex白皮书 Flex cookbok Flex编程指南 Flex设计模式等)

    这个文档可能专注于客户端与服务器之间的性能优化,讨论了如何在Flex应用中实现高效的数据通信、减少延迟、提高响应速度等,对优化Flex应用性能有重要指导价值。 5. **devappsflex.pdf**: 可能是关于开发Flex...

    Flex中的小技巧备忘

    ### Flex中的小技巧备忘 在Flex开发过程中,掌握一些实用的小技巧可以帮助开发者更高效地完成项目,并提高代码质量。本文将详细介绍四种与Flex相关的实用技巧。 #### 技巧一:复制文本到剪贴板 在某些场景下,...

    flex教程_chm

    API(Application Programming Interface)文档详细列出了Flex框架提供的所有类、方法、属性和事件,这对于理解Flex组件的工作原理、创建自定义组件以及优化代码性能至关重要。通过这个API文档,开发者可以迅速查找...

    flex

    标题中的"flex"通常指的是Adobe Flex,这是一款用于构建富互联网应用...例如,它可能涵盖了Flex编译器的工作原理、自定义组件的创建、性能优化技巧,或者推荐了一些如FlashBuilder、FlashDevelop等开发工具的使用心得。

    Flex中文帮助 学习Flex的好资料

    通过这份"Flex中文帮助"资料,你可以系统地学习Flex的基础概念、编程技巧和高级特性,无论是入门还是提高,都能从中受益。结合实例和练习,相信你会对Flex有更深入的理解,并能够熟练运用到实际项目中去。

    Flex3学习指南-是初学者学习Flex必备资料1

    13. **Flex的最佳实践**:包括代码组织、性能优化、错误处理和调试技巧,这些都是开发者在学习Flex过程中需要掌握的重要知识。 综上所述,"Flex3学习指南1-8"这个压缩包文件包含了Flex 3从基础到深入的多个章节,...

    Flex学习相关资料

    - **性能优化技巧**:如合理使用数据绑定、减少不必要的重绘和布局计算等,以提高Flex应用的运行效率。 通过学习这些Flex知识,开发者不仅可以掌握创建富有吸引力和互动性的Web应用的技能,还能理解如何有效地管理...

    flex air中文官方帮助文档

    调试技巧和性能优化是提高应用质量的关键。文档会介绍如何使用Flex Builder的调试工具定位并解决问题,以及优化代码和资源以提高运行效率。 总的来说,“Flex Air中文官方帮助文档”是开发者掌握Flex Air技术的宝典...

    Flex 4 高级编程 Flex 4 高级编程

    本篇文章将深入探讨Flex 4的高级编程技巧和特性。 1. **Spark组件架构**:Flex 4引入了全新的Spark组件集,相较于先前的 Halo 组件,Spark组件更加灵活、可定制化,并且支持皮肤和样式分离,这极大地提升了UI设计的...

    Flex应用程序性能改善技巧

    Flex应用程序性能改善技巧是开发人员在构建富互联网应用时必须关注的重要领域。Flex作为一个基于ActionScript和Flash Player的开发框架,提供了丰富的用户界面组件和强大的数据处理能力,但如果不加以优化,可能会...

Global site tag (gtag.js) - Google Analytics