`
wgcode
  • 浏览: 593831 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

代码级优化

阅读更多

Loader的冻结,flash player 9采用unload就行冻结,flash player10引入了一个新的方法

unloadAndStop()

进行冻结,该方法会卸载SWF文件,自动冻结SWF中的每个显示对象并强制运行垃圾回收。

关于MovieClip和Sprite的
鼠标事件,当不需要鼠标事件的时候将 mouseEnabled mouseChildren 设为false. 不断的检测鼠标交互事件会消耗CPU,尤其是大量交互对象重叠的情况。

对于执行时间太长的非
动画内容,优先选择计时器,而不是 Event.ENTER_FRAME 事件。

var obj:Object = {};  比  

var obj:Object = new Object(); 好

var arr:Array = []; 比 
var arr:Array = new Array(); 好  * 循环测试1000,0000次 , []比new快3倍

for (var i:int=0, len=arr.length; i<len; i++) 比 (头一次看到这种写法 经测试 效率是下面的2倍 
for (var i:int=0; i<arr.length; i++) 好

if (myObj != null)  比 
if (myObj)  快 

for ( var i:*        in  myObj )  比
for ( var i:String in  myObj )  快;

如果不是为了保存颜色值请不要适用uint这个类型,他的速度比起 int要慢多了;

Array的遍历要比Object或者Dictionary的枚举要快得多。

Dictionary当 weak key设置为 true 的时候要比 false 慢;

var myText:String = “a” + “b” + “c”;
var myText2:String = [ "a", "b", "c" ].join(”");

JavaScript里面在IE下后者要更快,但是在AS里面,前者更快!

在循环体内声明变量和在循环体外声明变量其实速度上不会有太大的区别。

4、小心Flash的重绘
如果你使用的是Flash Player 的Debugger版本,那么请在检查性能瓶颈的时候不要忘记打开显示重绘区域的功能,这将帮你迅速定位到舞台上有那些地方被重绘了,找出没有显示任何东西却不断重绘的地方,这些地方肯定是有问题的。Flash Player很笨,不会说你把一个DisplayObject的visible设置成false就放弃重绘那个显示对象。所以请保证你的 MovieClip在visible=false的时候为停止状态。有一点很有意思,假设两个现实物体存在 hitTest = true 这样的关系,那么重绘的区域的面积很有可能 > 两者的面积总和!

小心使用useBitmapCache = true
一般情况下除非你确定这个显示对象不可能发生变化那么用用也无妨,不过我更推荐自己手动的用BitmapData将该对象Draw一遍,然后让这个对象彻底消失。否则每次的变动都是巨大的性能消耗。

5. 乘法运算 比 除法 快 “两” 倍:
x=(stage.stageWidth/2);与x=(stage.stageWidth*0.5);的结果是一样的,但是乘法的运算效率要比除法快两倍(测试为真)

6.避免频繁的创建和删除对象动作:对于要从舞台中删除的对象,如果稍后还会再用到这个对象的话,使用visibility=false将其“删除”,而不是使用removeChild把它从显示列表中删除。因为Flash Player中重建对象要比隐藏对象复杂的多。

7.使用对象池:在游戏初始化时,把所有需要的对象存放到一个数组中。当需要删除和重建对象是,只需要声明一个对象引用数组中的这个对象即可。这比重新new一个对象出来要快多了。

8.位运算有时候会更快:位运算的计算方法和CPU的处理数据本质上是一致的,跟CPU讲它的“母语”,它“理解”起来,做起来自然就更快了!

9.使用Vector类存储一组相同类型的数据:Flash player10引入了Vector类。除了要求存储数据必须是同一种类型外,它的功能和Array类完全一致。但是如果当需要存储不同类型的数据时,Array的运行效率还要比Vector胜出一筹的。

10.用uint代替Math.floor:要对一个小数进行四舍五入,你第一时间可能会想到Math.floor方法,比如 Math.floor(9.3213);而将这个数字强制转换为uint类型,可以得到相同个结果:uint(9.3213);更重要的是Flash Player处理uint的速度要比Math.floor快的多。
 
11. 使用适当的Display Object
          o Shape – 没有交互(占内存少)
          o Sprite – 有交互(占内存多)
          o MovieClip – 有时间线(占内存更多)
    * 尽可能重用对象,而不要重新创建
    * 强制类型转换int(exp)要比Math.floor()和Math.ceil()快很多
    * 使用对象池技术重用对象
    * 释放内存 – 将所有对象的引用设置为null
    * 尽可能重用BitmapData
    * Callback要比event快而且消耗更少的内存

2. 减少CPU使用率
    * 即便将一个 Display Object从stage上移除了(removeChild)甚至是已经将它的引用设置为null,它依然有可能在消耗CPU。所以要在其移出 display list时将其完全停下来(比如mc.stop())。
    * 卸载从外部装载的内容时,使用loader.unloadAndStop(),而不要使用loader.unload()。
    * 尽可能禁用鼠标交互。obj.mouseEnabled = false; obj.mouseChildren = false;
    * Timer在某些情况下比ENTER_FRAME要好。
    * 减少tweening的使用。

3. ActionScript性能
尽可能使用Vector替代Array。
固定长度的Vector更快。(  Vector可以这样初始化:
var coords:Vector.<Number> = Vector.<Number>([132, 20, 46, 254, 244, 100, 20, 98, 218, 254]);)
    * 新的drawing API更快,它们是:drawPath, drawGraphicsData, drawTriangles。
    * 使用setVector()方法来处理像素。
    * 使用setPixel()和setPixel32方法时,要配合使用lock()和unlock()方法。
    * 使用TextField时,appendText()方法比+=操作符要快。
    * 尽可能在避免在循环内更新TextField。
    * 尽可能少使用方括号操作符访问Vector或Array元素,可以利用一个临时变量来操作。
    * 尽量将代码内嵌,避免过多的函数调用。(比如用 value > 0 ? value : -value; 来代替Math.abs())
    * 代码量过大也会造成性能的降低。尽量少使用大型第三方库(Flex, TLF)。
    * 避免在循环内使用evaluating statements(myArray.length)。用临时局部变量来操作。
4. 渲染性能
    * 尽可能避免使用alpha参数。
    * 适当的使用cacheAsBitmap可以大幅提高性能。(对于变化少的矢量元件)
    * 针对每个子元件使用cacheAsBitmap而不是针对父元件使用。
    * 使用TextLine处理静态文本比TextField 快而且使用更少的内存。
    * 使用cacheAsBitmapopaqueBackground参数可以改进渲染性能(包含TextField)。
分享到:
评论

相关推荐

    深入C++11代码优化与工程级应用

    代码优化与工程级应用

    编译原理实验报告-目标代码的优化

    ### 编译原理实验报告-目标代码的优化 #### 实验背景及意义 在软件开发过程中,提升程序的运行效率是至关重要的。编译器作为连接高级语言与机器语言的关键工具,其性能优化能力直接影响到最终程序的执行效率。本...

    JAVA代码优化工具

    Java代码优化是提升应用程序性能的关键步骤,尤其是在大型企业级应用或者高性能服务中。优化能够减少内存消耗,提高程序运行速度,降低CPU使用率,并改善整体的用户体验。在Java开发领域,有多种工具可以帮助开发者...

    C++11 代码优化与工程级应用

    深入C++11 代码优化与工程级应用

    深入应用C++11 代码优化与工程级应用.pdf

    祁宇 深入应用C++11 代码优化与工程级应用.pdf

    深入应用C++11代码优化与工程级应用.pdf

    深入应用C++11代码优化与工程级应用.带书签。完美

    代码优化 ppt 文档

    本文主要探讨了三个级别的代码优化:算法级优化、C语言级优化和汇编级优化。 首先,算法级优化是最高层次的优化,它的目标是在保持程序功能不变的前提下,通过改进算法降低运算量,从而提高效率。这一步骤通常要求...

    C语言 嵌入式C语言 优化

    代码级优化关注于编写更高效的单行代码,如减少不必要的运算,使用合适的数据类型,避免冗余的函数调用等。设计级优化则关注于整体架构,包括模块化设计、算法选择、数据结构优化等,以提高程序的整体运行效率。 1....

    深入应用C11 代码优化与工程级应用.pdf

    关于代码优化和应用的PDF书籍,有目录,高清,适合自学,提高自己的C++开发优化水平

    j2me 代码优化,内存优化分析

    在J2ME(Java 2 Micro Edition)开发中,代码优化和内存优化是至关重要的环节,因为资源有限的移动设备需要高效且节省内存的应用。以下是一些基于标题和描述的知识点,以及可能从压缩包文件中学到的内容: 1. **...

    一些凸优化相关的matlab代码.rar_Matlab代码_matlab凸优化_凸优化代码_凸优化相关matlab代码_凸优化问

    在提供的压缩包中,我们可以看到一些MATLAB源代码文件,这些文件可能是用于演示或解决不同类型的凸优化问题的示例代码。以下是每个文件可能涉及的知识点: 1. `1verify.m`:这个名字暗示了这个文件可能包含一个验证...

    程序优化介绍(c语言).ppt

    1. 代码级优化:这是最基本的优化阶段,关注的是代码的局部改进,如语句调整、循环展开、参数传递优化等。这需要程序员掌握大量小技巧,并理解编译器的优化能力,以便更好地配合编译器进行优化。在某些情况下,使用...

    优化大赛程序

    源代码级优化主要涉及改进算法、减少冗余计算、优化数据结构和使用更高效的编程技巧。机器码级优化则更多地涉及到编译器的工作,例如指令级并行、内存访问优化和循环展开等。 文件名如hss.exe、huanyun.exe、fly....

    嵌入式系统编程中的代码优化

    优化的目的在于减少代码大小和提高执行速度,这可以通过算法优化、数据结构优化以及指令级优化等多种手段来实现。 - **算法优化**:算法的选择直接影响着程序的执行效率。例如,通过预先计算并将结果存储在查找表中...

    数据库性能优化:策略、技术与最佳实践

    同时,利用执行计划分析、慢查询日志、性能监控工具、代码级优化、数据库版本升级、读写分离、异步处理、批量操作、优化数据类型和避免全表扫描等技术方法,可以进一步挖掘性能潜力。最后,遵循性能基准测试、持续...

    C++代码优化方法总结.rar_c代码优化_代码优化_优化_优化 c_优化方法

    在编程领域,优化是提升程序性能的关键步骤,尤其是在C++这样的高级语言中,代码优化能够显著提高程序运行速度,减少资源消耗。本文将深入探讨C++代码优化的一些常见方法和策略,旨在帮助开发者提高程序效率。 一、...

    sql高级优化代码 access

    本主题聚焦于"Oracle SQL高级优化代码"以及与"Access"相关的源代码,这将帮助我们理解如何提升数据库性能并优化数据访问。在本文中,我们将深入探讨SQL优化策略,了解Access数据库的特点,并分析在实际应用中如何...

    利用cvx 解决凸优化问题实例代码.rar_matlab 凸优化_凸优化_凸优化程序_凸优化问题_利用cvx 解决凸优化问题实例

    提供的"利用cvx 解决凸优化问题实例代码.docx"文档中,很可能包含了一个具体的凸优化问题的MATLAB代码。代码可能包括定义变量、构建目标函数和约束条件,以及调用CVX求解器的完整过程。通过对代码的详细分析,我们...

    json代码整理优化

    综上所述,"json代码整理优化"这个主题涵盖了解析、编辑和优化JSON数据的方法,以及在Java开发中的应用。JsonView作为一款工具,可以帮助开发者更高效地处理JSON,提升工作效率。在实际开发中,合理利用这类工具和...

    web前端笔试题面试题汇总+前端优化总结.pdf

    【代码级优化】 1. JavaScript优化: - DOM操作优化:避免频繁操作DOM,尽量减少DOM树的改动。 - 使用事件委托,减少事件监听器数量。 - 避免全局查找,提前保存引用,减少查找次数。 - 使用异步加载,避免阻塞...

Global site tag (gtag.js) - Google Analytics