`

提高Flex程序性能的10个秘诀

    博客分类:
  • Flex
 
阅读更多

规则 # 1: 打扫代码

一般来说,保持代码清洁是一个很好的习惯。这可并不仅是写出的代码很整齐并具有良好可读性的,而且还得不留任何累赘,比如:内存泄露,cpu超载等,这些必须要避免。我们需要的是可以被GC(垃圾回收)回收的对象


1) 管理你的事件 监听 器 -包含两部分。首先,你必须养成随时删除无用的事件监听器的良好习惯,因为这些监听器带来的对象引用会阻止垃圾回收器从而造成内存泄露,而且它们还很难跟 踪并且影响程序的性能。当然,你可以使用弱引用事件监听器以降低内存泄露的危险,但是你最好还是在它们没用的时候把它们删掉。其次,删除事件监听器失败会 引发性能问题,因为,尽管你有十个不愿意,但是相应的事件处理器可能已经开始工作了。比如,你在子组件 里分发了一个事件,父对象中存在处理这个事件的处理器,然后处理永远不会到来的事件(监听器被删除)。如果你不希望这种事发生,就得及时清理事件处理器;让它们只处理特定的事件类型,当你不用时就删除它们。


2) 卸载加载 - 每次你使用加载器(图像,SWFLoader等等)加载对象后,最好调用 unloadAndStop()方法来卸载加载的内容,并让GC来回收这些垃圾。这样会大大节省系统资源和cpu的使用。我甚至每次加载静态图片 文件 时也会这么做,以便防止内存占用过大。

3) 清除东西 - 我发现在自定义组件,数据管理和视图中使用“dispose()”方法非常有效,它可以用来清除对象资源。虽然在你使用完一个对象时,你必须明确的调用 dispose()方法,但是这个方法却可以处理所有需要清除的对象以便释放资源。比如,停止计时器,移除事件监听器,卸载加载器对象,设置变量为空等 等。简单点说,它可以去掉任何可能导致内存泄露或cpu超载的东西。当然,dispose()本身也需要消耗cpu,但是请相信我,这和耗费时间,占用计 算机资源,跟踪内存泄露和影响性能相比,简直微乎其微。

Rule #2:   I如果你不必要做某些事,那就别做
另一个规则就是:如果你不必要做某些事,那就别做。当然这并不代表着你“不用上班”,“不用刷牙”,你当然得干这些事。我的意思是如果没必要的话,就不要做一些影响计算机性能和增加资源开销的事。


4) 处理 Collection -我总是看到一些东西,我一看到这些东西就有一种想立刻改变它们的冲动。Collection(ArrayCollection,XML ListCollection,等等)是一种包装了原始集合类(比如array或xmllist )的帮助类,它们使开发 人员操作原始集合更加方便和简单,但是同时它们也会消耗大量cpu资源。绑定collection的原因是因为每次你添加,移除,更新时,事件就会被分发出去。每次你刷新collection时,它们也会分发事件。
秘 诀1,你必须考虑collection产生的事件。如果你遍历一个集合,然后更新了10000项数据,那么10000个事件就会被分发出去。这会大大影响 性能,还有可能搞死程序的UI。如果集合里的某些事件不必要分发出去,你可以使用disableAutoUpdate()方法来终止事件的分发,需要时再 用enableAutoUpdate()方法来还原。
秘诀2,如果你没必要使用collection,那就别用。如果你只是简单的遍历10000项数据,那么用array就可以了。
在 第3个秘诀是关于使用过滤方法过滤collection。如果在collection中使用过滤方法,那么你就不需要在每次添加新数据时都调用 refresh()方法了。当然这也会在你最不希望的地方产生性能问题。举个例子,你把一个datagrid和一个collection绑定,然后更新这 个集合。如果集合中有过滤器,当你调用additem方法时会被自动过滤,如果你在添加数据后调用refresh()方法,则会导致datagrid中的 数据无效,因为整个datagrid都被重新拿出来校验了一遍。这会在一定程度上影响程序的性能。

5) 使用延时实例化 - 默认情况下,Flex的所有导航容器(tab nav, accordion, viewstack等等)只会在需要时才创建子容器。这会使程序减少很多冗余的容器,从而提升程序的性能。如果你不小心的话,改变生成规则会带来很多问题。
当创建自定义组件时,你要拥有一种延时实例化的意识。不要在构造函数中创建子对象,而是要覆盖createChildren()方法,然后在这个方法里创建它们。这样,你的组建就会遵循延时实例化规则,从而较少性能的降低。

6) 对象重用和新对象 - 我以前写过这个话题 ,但是我在这里还是要重申一遍,重用已经存在的对象比创建新对象要减少很多的开销。你可以参考这个数据虚拟化

7) 如果没有任何改变就不要/删除/重新校验对象

如果你创建了一个自定义组件,然后有人改变了一个属性(通过getter/setter),如果传入的值没有改变的化,就不要校验组件属性了。因为这可能导致组件重新走一遍校验流程。有改变时再校验。这有个例子:

public function set myProperty( value : Number ) : void

{

   if ( _myProperty != value )

   {

_myProperty = value;

propertiesChanged = true;

invalidateProperties();

dispatchEvent( new Event( "change" ) );

   }

}

Rule #3: 合理地利用语言

AS语言包含很多有关性能的特性,请使用。


8) 动态/泛型 vs 类型对象 - 动态和泛型对象都有自己的位置。它们很灵活,可以被修改成任何属性,能在很多情况下使用。话虽如此,但是如果你不需要使用泛型的特性,那么最好还是定义成强类型对象。因为使用强类型正是AS速度很快的原因。用强类型定义的对象显然比泛型要快。

9) 在适当的情况下使用常量 - 如果你有一个不变的值,但是却需要随时引用,那就用常量吧。常量的速度很快,而且开销很小。

10) 使用静态成员 - 静态属性和函数不需要实例化就能访问和调用,因此能够通过类来直接访问它们,而且不需要占用内存空间来实例化对象。工具函数,或者不需要实例化属性的函数都可以被定义为静态函数。

分享到:
评论

相关推荐

    Flex 应用程序性能: 改善客户端应用程序和服务器性能的技巧与技术

    本文旨在探讨提升 Flex 应用程序性能的方法和技术,分为客户端和服务器端两个方面。 #### 客户端性能优化 ##### 缩短启动时间 启动时间对于用户感知的性能至关重要。为了减少启动时间,可以通过以下几种方法来实现...

    flex 两个图片播放小程序

    在这个“flex 两个图片播放小程序”项目中,我们可以看到它被用来创建一个图片浏览应用,支持图片的放大和缩小功能,提供了用户友好的交互体验。接下来,我们将深入探讨Flex在图片浏览中的应用及其关键技术。 首先...

    flex例子.flex源程序

    这个"flex例子.flex源程序"很显然是一个Flex开发的学习资源,它包含了一个或多个示例项目,用于帮助开发者理解和掌握Flex编程的基本概念和实践。 Flex的主要组件包括MXML和ActionScript,它们是构建Flex应用的两大...

    selenium对flex程序的自动化测试.docx

    * SeleniumFlexAPI.swc 和 sfapi.swc 是两个重要的文件,需要添加到 Flex 项目中以便使用 Selenium 对 Flex 程序进行测试。 * 在编译 Flex 项目时,需要添加这两个文件到编译过程中。 * 在测试代码中,需要创建一个 ...

    测试flex应用程序

    "sfapi" 提供了一个接口,使得测试工具,如Selenium,能够与Flex应用程序的控件进行交互。Selenium是一款强大的Web应用程序自动化测试工具,它支持多种浏览器和编程语言。将Selenium与sfapi结合使用,我们可以在...

    Flex应用程序性能改善技巧

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

    flex性能测试PPT

    【Flex性能测试】是针对基于Flex技术构建的富互联网应用程序(RIA)进行的性能评估过程。Flex是由Adobe公司开发的一种支持RIA开发和部署的技术,它主要用于创建具有高度交互性和动态用户体验的企业级应用。Flex的...

    避免Flex RSL重复load 提高module加载性能的swc

    Flex RSL(Runtime Shared Libraries)是Adobe Flex框架中的一种机制,用于优化应用程序的加载和运行时性能。RSLs是一组预编译的库,包含了常见的Flex组件和类,允许多个应用程序共享这些资源,减少网络传输的数据量...

    用Flex写的一个入门程序

    标题 "用Flex写的一个入门程序" 暗示了这篇内容是关于使用Adobe Flex进行编程的初学者教程。Flex是一个开源框架,主要用于构建富互联网应用程序(Rich Internet Applications, RIA),它基于ActionScript和MXML语言...

    微信小程序+Flex布局示例源代码

    在这个"微信小程序+Flex布局示例源代码"中,我们将深入探讨Flex布局在微信小程序中的应用。 Flex布局,全称为Flexible Box布局,是CSS3中的一种新的布局模式,旨在解决传统盒模型在处理复杂或响应式布局时的困难。...

    Flex程序如何获取html容器传递的URL参数值

    Flex,作为一种基于Adobe Flash的富互联网应用开发框架,能够创建高性能、跨平台的应用程序。然而,Flex程序如何从HTML容器中获取URL参数值,成为了一个重要的技术知识点。 ### Flex程序与HTML容器间的URL参数传递 ...

    微信小程序 Flex布局详解

    弹性因子(flex-grow, flex-shrink, flex-basis)在微信小程序的Flex布局中,每个伸缩项目都可以通过flex属性来指定其弹性因子,它是一个简写属性,可以设置三个值:flex-grow, flex-shrink, 和 flex-basis。1. flex...

    FLEX3程序的皮肤集合

    Flex3程序的皮肤集合是一个资源库,包含了多种设计精美的Flex应用皮肤,这些皮肤能够显著地改变Flex程序的用户界面外观,提升用户体验。Flex3是Adobe Flex框架的第三个主要版本,它提供了强大的富互联网应用程序...

    flex4.5 开发安卓程序文档

    这份"Flex 4.5 开发安卓程序文档"为开发者提供了宝贵的资源,特别是对于初学者来说,它是一个很好的入门指南。 一、Flex 4.5概述 Flex 4.5基于ActionScript 3.0和Flash Player或Adobe AIR运行时环境,提供了一个...

    flex安装程序 windows

    Flex,全称“Fast Lexical Analyzer Constructor”,是一种广泛使用的开源工具,主要用于生成词法分析器,也就是我们...通过熟练掌握Flex,你可以更好地理解和构建各种语言的解析器,提高编程工具的效率和定制化程度。

    Flex 性能简介.pdf

    ### Flex性能简介:Flex与JavaServer Pages (JSP) 应用程序的比较 #### 引言 随着互联网技术的发展,用户体验与服务器性能成为衡量Web应用程序的重要指标。本篇文章基于一份名为“Flex 性能简介”的PDF文档内容,...

    微信小程序flex布局demo

    在微信小程序中,开发者可以利用CSS布局方式之一的Flex布局来实现复杂的页面设计,提高用户体验。本教程将深入探讨微信小程序中的Flex布局。 一、Flex布局基础 1. Flex容器:在CSS中,一个元素如果设置了`display:...

    flex程序设计基础教材

    9. **Flex Builder**:虽然可以使用命令行工具开发Flex,但Adobe Flex Builder提供了一个强大的图形化开发环境,具有代码提示、调试和性能分析等功能,有助于提高开发效率。 10. **Flex应用程序结构**:理解模块化...

Global site tag (gtag.js) - Google Analytics