`

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

    博客分类:
  • 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;


分享到:
评论

相关推荐

    Flex应用程序开发

    ### Flex应用程序开发:深入理解与实践 #### 一、Flex概览 Flex是Adobe Systems Incorporated推出的一款用于构建高质量的Rich Internet Applications(RIA)的开源框架。它基于Flash平台,允许开发者使用标准的Web...

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

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

    flex企业应用开发实践.pdf

    ### Flex应用性能优化 性能优化是任何企业级应用开发中不可忽视的环节。本书的最后一部分着重讨论了Flex应用的性能优化策略,包括但不限于代码优化、资源加载策略、缓存机制、网络通信优化等方面。通过这些优化措施...

    Flex应用程序性能改善技巧

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

    企业应用FLEX开发实战

    第五章和第六章可能会探讨FLEX中的数据服务,如AMF通信、Web服务调用和 BlazeDS/LiveCycle Data Services的使用,让FLEX应用程序能够与后端服务器无缝交互,实现数据的获取和更新。 第七章至第九章可能涉及更高级的...

    ArcGIS API for Flex应用开发

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

    flex性能测试PPT

    - 分析系统业务流程和架构,了解Flex应用的工作原理。 - 明确用户需求,分解测试目标,例如响应时间、并发用户数等。 - 定义性能测试的概念,如在线用户、并发用户和资源使用率。 2. **创建脚本**: - 使用工具...

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

    本篇文章将深入探讨17个典型的Flex应用案例,这些案例展示了Flex在不同领域的广泛应用和卓越性能。 1. **Vook com**:Vook是一款结合了文字、视频和互动元素的创新阅读体验平台。Flex的多媒体功能在此得以充分发挥...

    Flex 桌面应用

    此外,对于Flex的桌面应用,开发者还需要熟悉Adobe AIR,它是Adobe提供的一个跨平台运行时环境,允许Flex应用运行在用户的桌面系统上,就像原生应用一样。开发者可以利用AIR提供的本地文件系统访问、网络通信以及...

    FLEX企业应用开发实战PDF

    9. **部署和发布**:最后,书会讲解Flex应用程序的打包、部署和发布策略,包括在不同的服务器平台(如Tomcat、IIS)上的部署方法。 10. **最佳实践和案例分析**:书中还会包含一些企业级应用开发的最佳实践,以及...

    loadrunner for flex引用包

    在进行Flex应用的性能测试时,LoadRunner是一个不可或缺的工具。LoadRunner for Flex是HP公司推出的一款强大性能测试工具,专为Flex应用程序...在实际工作中,还要不断学习和实践,以应对日益复杂的Flex应用性能挑战。

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

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

    ArcGIS Server Flex 应用视频

    10. **性能优化**:探讨如何提高Flex应用的性能,包括合理使用缓存、减少网络请求、优化地图渲染等技巧。 通过这些视频教程,开发者不仅可以学会如何构建基本的Flex地图应用,还能掌握高级功能的实现,从而充分利用...

    flex_与JSP性能比较分析

    这种设计模式使得Flex应用程序即使面对高并发请求也能保持较低的服务器CPU占用率,进而提高整体系统的响应速度和吞吐量。 #### 七、总结 综上所述,通过对比Flex与JSP在相同应用场景下的性能表现,我们可以得出...

    flex应用anychart

    而AnyChart,作为一个跨平台的JavaScript图表库,能够无缝地与Flex结合,为Flex应用提供高质量、高性能的图表功能。 集成AnyChart到Flex应用的过程并不复杂。在提供的压缩包文件“AnyChartFlexComponent.swc”中,...

    Flex 性能简介.pdf

    #### Flex应用程序的性能改善 Flex之所以能够在服务器端表现出色,部分原因在于其独特的架构设计。与传统的Web应用程序相比,Flex应用程序通过减少与服务器之间的交互次数,减轻了服务器端的负担。此外,Flex利用了...

    Flex 性能优化全集

    通过对Adobe Flex应用程序进行细致的性能优化,不仅可以提升用户体验,还能有效减少服务器负载,提高整体系统效率。开发者应该密切关注应用的实际运行情况,适时调整优化策略,以应对不断变化的需求和技术环境。

    Flex 应用内存泄露的分析与诊断

    Flex 应用内存泄露的分析与诊断主要集中在 Flex 应用程序中由于内存管理不当...通过谨慎处理对象引用、正确管理事件监听器和利用调试工具,可以有效地减少 Flex 应用中的内存泄露问题,从而提高应用的性能和稳定性。

    flex 性能,查看内存

    Flex应用通常涉及大量的交互和动态数据处理,因此性能优化和内存管理是开发过程中的关键环节。以下是对Flex性能优化和内存查看的深入探讨: 1. **Flex性能优化**: - **代码优化**:减少不必要的计算,避免在循环...

Global site tag (gtag.js) - Google Analytics