1 代码写法

1 定义局部变量

定义局部变量的时候,一定要用关键字var来定义,因为在Flash播放器中,局部变量的运行速度更快,而且在他们的作用域外是不耗占系统资源的.当一个函数调用结束的时候,相应的局部变量都会被销毁,并且释放出他们占有的系统资源

2 申明变量时强制类型

var a:int; 而非 var a;

3  访问静态属性 比 非静态属性 慢

4  getter setter 比直接访问属性慢

5  final变量和类效率更高

6  申明多个变量时单行效率比多行申明高

for(var i:int=0; i<100000; i++)

{ var v1:Number=10, v2:Number=10, v3:Number=10, v4:Number=10;}

7 不要在循环内定义变量

8 删除不必要的导入类

9 as 比 type(value) 转型要快

10 短变量名比长变量名高效

11  尽量将代码内嵌,避免过多的函数调用。(比如用 value > 0 ? value : -value; 来代替 Math.abs())

调用函数成本很高。尝试通过移动内联代码来减少函数的调用次数

for (i = 0; i< MAX_NUM; i++)

{

currentValue = arrayValues;

arrayValues = Math.abs ( currentValue );

}

优化代码如下:运行速度提高四倍以上。

for (i = 0; i< MAX_NUM; i++)

{

currentValue = arrayValues;

arrayValues = currentValue > 0 ? currentValue : -currentValue;

}

12 if(a.a) 比 if(a.a==null) 快

13 for..in 效率大于for ,需求证

14 当用到复杂的条件表达式时。把他们打散成为嵌套的独立判断结构是最佳方案。比如if(a&&b&&c)的效率就低于if(a){if(b){if(c){}}}。

15  对 while 循环使用相反的顺序 ( while (--i > -1) { } ) 比for更高效

16 低阶运算效率高于高阶运算

unit()--->Math.floor()     更快的算法:var u:uint=1.5>>0;

int()--->Math.ceil()

位运算>乘法>除法 ,但要注意是的有些运算是不能转换的 13/2 不能转换成 13<<0;

17  方法闭包作为监听器更方便和高效,因为他不需要活动的对象作为依赖体.

class Form

{

function setupEvents()

{

var f = function(event:Event) {

trace(“my handler”);

}

grid.addEventListener(“click”, f);

}

}

优于

class Form

{

function setupEvents()

{

grid.addEventListener(“click”, f);

}

function f(event:Event)

{

trace(“my handler”);

}

}

2 数组等容器

1  初始化 var a:Array=[]; 效率高于 var a:Array = new Array();

2 一维数组来代替二维数组

3 关于Vector和Array

1在基本数据类型 int number string 时Vector 效率优于Array

2在Object中,还是选择Array,不管是排序还是大量应用Array,特别在用sortOn时Array比Vector要快.

3固定长度的 Vector 更快。( Vector 可以这样初始化:var coords:Vector.<Number> = Vector.<Number>([132, 20, 46, 254, 244, 100, 20, 98, 218, 254]);)

4数组循环:

用局部变量缓存数组长度 ,用uint代替int

for(var i:uint=0;i<len;i++){

Var a:Object = arr;

}

5 重置数组用

Arr.length=0 效率最快

6 初始化数组

a[]  比push方法效率高600%

7  尽可能少使用方括号操作符访问 Vector 或 Array 元素,可以利用一个临时变量来操作。

8  Dictionary 弱引用可用来自动销毁资源.

3 显示对象api相关

1  新的 drawing API 更快,它们是:drawPath, drawGraphicsData, drawTriangles。

2  使用 setVector() 方法来处理像素。

3  使用 setPixel() 和 setPixel32 方法时,要配合使用 lock() 和 unlock() 方法。

4  尽可能在避免在循环内更新 TextField。

5  位图还是矢量图:

矢量 :同屏元素较少, 需要放大不失真   ,位图:需要大量元件,游戏特效,图像特效

矢量平滑处理:减少控制点。可使帧频稳定。

选中矢量图,Ctrl+Alt+Shift+C,减少线条

位图压缩方式 Fireworks 可以用PNG8格式高效的压缩带Alpha通道的图片

6 运动物体针对每个子元件使用 cacheAsBitmap 而不是针对父元件使用。

7 使用 cacheAsBitmap 和 opaqueBackground 参数可以改进渲染性能(包含 TextField )。

8   stage3d在旋转、缩放和alpha混合方面很有优势,这块是位图的软肋,位图只有在原始状态下渲染是最快的,想要不影响效率就得预先缓存出各种情况,会耗费掉大量内存,因此在这方面stage3d的性能更加强大 ,可以用3d来做2d加速

9  使用 TextField 时,appendText() 方法比 += 操作符要快。

10  使用 TextLine 处理静态文本比 TextField 快而且使用更少的内存

11 对文本基本搜索和提取时,使用 String 类方法而非正则表达式

12 当某个实例透明度小于1时,也会对播放速率造成影响。低透明度的可设置visable为flase

13 不要用masks 应该用 scrollRect来做遮罩效果

14 使用适当的DisplayObject

* Shape – 没有交互(占内存少)

* Sprite – 有交互(占内存多)

* MovieClip – 有时间线(占内存更多)

15 减少重绘区域

显示重绘区域:flash.profiler.showRedrawRegions (true,0x33ff00);

16 尽可能禁用鼠标交互。obj.mouseEnabled = false; obj.mouseChildren = false;

17 激活和停用事件

使用 Event.ACTIVATE 和 Event.DEACTIVATE 事件检测后台是否处于非活动状态,并相应地优化应用程序。对于移动设备很重要,例如后台运行air时,可将其帧频减小。

18 回调方法 要比 event 快而且消耗更少的内存

4   资源

对象缓存池

减少文件大小 (嵌入字体少用,用滤镜而非位图)

合理加载,要用时加载资源

列表和列表数据分开加载

数据分页

分次请求

资源销毁

1 释放内存 – 将所有对象的引用设置为 null

2 bitmap bitmapData 不用时  dispose();并将引用设置为null

3 卸载从外部装载的内容时,使用loader.unloadAndStop(),而不要使用 loader.unload()。

4 xml对象会比字符串占用内存增大20倍,可用System.disposeXML()来断开程个xml对象连接销毁xml对象.

5 URLLoader.close();URLStream.close();加载素材时可用这两个加载再用Loader.loadbytes。因为  Loader.load会展开swf文件,内存比压缩的流数据占用内存大.

6 适当使用事件冒泡,如有大量子对象需要添加事件监听器时,可以添加在父窗口中,冒泡实现 。

,大量事件冒泡是不必需的,可停止冒泡.事件记得移除监听

7 不可见mc ,先stop,再移除监听,再从舞台上remove.

8 如果之前使用了ExternalInface.callBack("APIName", functionName)声明了一个API,则可以使用ExternalInface.callBack("APIName", null)取消该API

总结:

移除监听

管理intervals timeout timer

卸载swf

停止声音视频

移除显示对象

停止时间帧

关闭连接 LocalConnections NetConnection NetStream

没有摄像头和麦克风处理的处理

释放位图数据

Janitor类

http://gskinner.com/talks/resource-management/source.zip

参考:

http://gskinner.com/talks/resource-management/

http://www.rozengain.com/blog/2007/05/01/some-actionscript-30-optimizations/

编译原理:

 
 

as3 优化的更多相关文章

  1. 使用mxmlc在命令行编译.as代码

    在cmd命令行环境下,敲mxmlc出现 提示Error: could not find JRE和"Error: could not find Java 2 Runtime Envi 解决办法 ...

  2. flex编译命令相关

    最近碰到几次flex组件集版本问题,mx容器包含s组件,错误百出,会一直提示皮肤文件错误,上网查了一下,只要在工程属性中--->Flex编译器--->附加的编译参数中加入如下命令行即可:- ...

  3. (转)as3效率优化

    1.改进算法无论对于那一种程序,好的算法总是非常重要的,而且能够极大地提高程序性能,所以任何性能的优化第一步就是从算法或者说程序逻辑的优化开始,检查自己的程序是否有多余的运算,是否在没有必要的时候做了 ...

  4. AS3中释放优化的几条常识

    as3中垃圾和堆弃物如不及时清理,会造成进程的速度方面授予限制,下面讲几点关于释放优化的几条内容. 被删除对象在外部的所有引用一定要被删除干净才能被系统当成垃圾回收处理掉: 父对象内部的子对象被外部其 ...

  5. as3效率优化

    1.改进算法无论对于那一种程序,好的算法总是非常重要的,而且能够极大地提高程序性能,所以任何性能的优化第一步就是从算法或者说程序逻辑的优化开始,检查自己的程序是否有多余的运算,是否在没有必要的时候做了 ...

  6. [转] 擎天哥as3教程系列第二回——性能优化

    所谓性能优化主要是让游戏loading和运行的时候不卡. 一  优化fla导出的swf的体积? 1,  在flash中,舞台上的元件最多,生成的swf越大,库里面有连接名的元件越多,swf越大.当舞台 ...

  7. AS3.0 效率优化

    1.显示对象:1.1.静态的不需互动的图形,使用Shape对象.(eg:getSize(newShape())=236) 1.2.不需要时间轴的互动图形,使用Sprite对象.(eg:getSize( ...

  8. [转]关于AS3 Socket和TCP不得不说的三两事

    磨刀不误砍柴工,让我们从概念入手,逐步深入. 所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过"套接字"向网络 ...

  9. 【转】Alchemy的使用和多项式批量计算的优化

    原文:http://www.cnblogs.com/flash3d/archive/2012/01/30/2332158.html ================================== ...

随机推荐

  1. HDMI接口基本信息

    一.HDMI基本概念1.HDMI标准的发展历史: 2002年12月9日,HDMI1.0版正式发布,标志着HDMI技术正式登上历史舞台. 2004年1月,HDMI1.1版发布. 2005年8月,HDMI ...

  2. 大数阶乘 nyoj

    大数阶乘 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,我们该如何去计算它并输出它?   输入 输入一个整数 ...

  3. FastAdmin 开发第三天:认识目录

    以下为标准 FastAdmin 安装后的目录 我们在运行命令时都是在这个目录. 我们所有的命令都在这个目录下面运行. 比如:安装前端组件,bower install 安装php 组件 composer ...

  4. FastAdmin composer json 版本说明

    来源于 FastAdmin 执行 composer update 后将 ThinkPHP 升级到了 V5.1. FastAdmin  是基于 ThinkPHP 5.0.x 开发的,而 ThinkPHP ...

  5. markdown 知识点

    符号 说明 作用 ___ 三个下划线 一条直线 * 或_ 1个星号 或 1个下划线 文字斜体 ** 或__ 2个星号 或 2个下划线 文字加粗 全角2个空格 缩进2个汉字 竖线之间加3个间隔符放在第二 ...

  6. AppBox中,如何在用户管理页面显示用户所属的多个角色?

    <f:TemplateField Width="200px" HeaderText="角色">    <ItemTemplate>    ...

  7. Thinkphp自动验证规则

    其实说白了,这篇文章就是转给自己看的,省的下次用的时候满网络找了.有需要的同学也可以看看.自动验证是非常有用的一个技术.平常的验证基本就是,用户名是否为空,用户名是否重复,密码,重复密码是否一致.官方 ...

  8. [转]CSKIN 作者分享的图片处理类

    本代码来自:http://bbs.cskin.net/forum.php?mod=viewthread&tid=113&fromuid=2446 里面没有我想找的任意角度旋转的方法,代 ...

  9. Valgrind memcheck 8种错误实例

    调不尽的内存泄漏,用不完的Valgrind Valgrind 安装 1. 到www.valgrind.org下载最新版valgrind-3.2.3.tar.bz2 2. 解压安装包:tar –jxvf ...

  10. cookie js案例

    //存cokie function setcookie(keys,value,time){ document.cookie=keys+"="+decodeURIComponent( ...