`
bal1212
  • 浏览: 76867 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

提高Flex应用程序性能的10大秘笈

阅读更多

[新闻资讯] 提高Flex程序性能的10个秘诀

  • 资讯类型: 翻译
  • 来源页面: http://www.insideria.com/2009/09/10-tips-for-flex-application-p.html
  • 资讯原标题: 10 Tips for Flex Application Performance
  • 资讯原作者: Andrew Trice
  • 我的评论: 
    对这篇文你有啥看法,跟贴说说吧!欢迎口水和板砖,哈哈。欢迎大家和我们一同分享更多资讯。

    本篇文章将通过简洁明了的方式,告诉大家保持Flex程序快速,简洁和高效的10个秘诀,

    规则 # 1: 打扫代码

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


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


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

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

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


    4) 处理Collection -我总是看到一些东西,我一看到这些东西就有一种想立刻改变它们的冲动。Collection(ArrayCollection,XMLListCollection,等等)是一种包装了原始集合类(比如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) 使用静态成员 - 静态属性和函数不需要实例化就能访问和调用,因此能够通过类来直接访问它们,而且不需要占用内存空间来实例化对象。工具函数,或者不需要实例化属性的函数都可以被定义为静态函数。

    再啰嗦两句有关#9的...通常我建议大家使用静态常量。这会减少内存的开销。

    以上的这些秘诀可能看起来太苛刻,太琐碎了,不过请相信我,这是很值得的事。当你开发应用程序时,希望你能想到这些秘诀。

    分享到:
    评论

    相关推荐

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

      ### Flex 应用程序性能:改善客户端应用程序和服务器性能的技巧与技术 #### 概述 随着互联网技术的发展,富互联网应用(RIA)的需求日益增长。Macromedia Flex 是一个强大的平台,它允许开发者创建高性能的 RIA。...

      Flex应用程序性能改善技巧

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

      测试flex应用程序

      在IT行业中,Flex是一种用于构建富互联网应用程序(RIA)的框架,它基于ActionScript和Flash Player或Adobe AIR运行时。Flex应用程序通常具有丰富的用户界面,能够提供动态交互体验。而当我们需要对这些Flex应用程序...

      flex例子.flex源程序

      Flex是一种开源的、基于ActionScript的编程框架,主要用于构建富互联网应用程序(Rich Internet Applications, RIA)。这个"flex例子.flex源程序"很显然是一个Flex开发的学习资源,它包含了一个或多个示例项目,用于...

      建立连接BlazeDS远程端的Flex应用程序

      ### 建立连接BlazeDS远程端的Flex应用程序 #### 深入解析:BlazeDS在Flex与后台代码交互中的角色 BlazeDS是一款由Adobe开发的强大服务器端技术,用于实现Flex、AIR和Java应用程序之间的实时通信。它允许开发者在...

      flex_与JSP性能比较分析

      这是因为Flex应用程序能够在客户端缓存大部分数据和逻辑,从而减少了与服务器之间的通信次数。这种设计使得Flex应用程序在完成一个购物会话时所需的网络传输字节数相对较少,仅为282,931字节,而JSP应用程序则需要...

      Flex应用案例.zip

      Flex是Adobe公司开发的一种用于构建富互联网应用程序(RIA)的技术框架,主要基于ActionScript和MXML语言。在本文中,我们将深入探讨Flex的应用场景、核心概念以及如何通过具体案例来理解其工作原理。 1. Flex简介 ...

      Flex4:开发RIA应用程序

      Flex4是Adobe公司推出的一个用于开发丰富互联网应用程序(Rich Internet Applications,简称RIA)的框架。RIA是指拥有桌面应用程序体验的网络应用程序,它能够提供响应快速、功能丰富并且更接近桌面软件用户体验的...

      flex3应用程序示例

      在Flash Builder 3中开发Flex应用程序,用户可以利用其强大的集成开发环境(IDE),包括代码编辑、调试和性能分析工具,简化开发流程。Flash Builder 3是专为Flex和ActionScript开发设计的,提供代码提示、自动完成...

      企业应用FLEX开发实战

      《企业应用FLEX开发实战》是一本专注于使用Adobe FLEX进行企业级应用程序开发的实践教程。本书涵盖了从基础到高级的各个层面,旨在帮助开发者掌握FLEX技术在实际项目中的应用,提升软件开发效率和质量。书中内容分为...

      webload系列之--flex应用的性能测试.swf.swf

      webload系列之--flex应用的性能测试,webload系列之--flex应用的性能测试

      构建Flex应用的10大误区

      构建Flex应用时,开发者常陷入一系列误区,这些误区可能导致应用性能下降、用户体验不佳或开发效率低。以下是关于Flex开发的10大误区的详细解析: 1. **仅用于Web 1.0应用**:Flex的强大之处在于其丰富的组件库和...

      FLEX3程序的皮肤集合

      通过灵活运用Flex3的皮肤功能,开发者可以创造出独特且吸引人的用户界面,从而提高用户满意度和应用程序的吸引力。这个皮肤集合为Flex3开发者提供了一个丰富的资源库,帮助他们快速实现UI的个性化和优化。

      集成 Flex 与 Ajax 应用程序

      集成 Flex 与 Ajax 应用程序是现代 Web 开发中的一种策略,旨在结合两种技术的优势,以创建丰富、交互性和高性能的用户体验。Flex,作为 Adobe 的一个开源框架,主要用于构建 Flash 应用程序,提供了丰富的用户界面...

      Flex开发AdobeAIR应用程序

      使用 Adobe Flex 3 开发 Adobe AIR 1.1 应用程序

      Flex 性能简介.pdf

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

      ArcGIS API for Flex应用开发

      - **提高用户体验**:通过提供强大的用户界面组件,增强应用程序的功能性和美观性。 - **多平台兼容性**:确保开发的应用程序可以在不同的操作系统和设备上无缝运行。 - **资源高效利用**:优化资源使用模式,实现...

      17个典型的Flex应用案例介绍

      Flex是一种由Adobe公司开发的富互联网应用程序(RIA)框架,用于构建交互性强、用户体验丰富的Web应用。本篇文章将深入探讨17个典型的Flex应用案例,这些案例展示了Flex在不同领域的广泛应用和卓越性能。 1. **Vook...

      FLEX企业应用开发实战PDF

      《FLEX企业应用开发实战》是一本专注于使用Adobe Flex技术进行企业级应用程序开发的专业书籍。Flex是Adobe公司推出的一种开放源代码的富互联网应用程序(Rich Internet Application,RIA)框架,它基于ActionScript...

    Global site tag (gtag.js) - Google Analytics