actionscript 2的脚本性能

设计开发平台:Flash cs3 profession

测试对象:Actionscript 2.0

发布播放器版本:Flash Player 6

测试平台:windows mobile

测试播放器版本:Flash lite2.1

使用flash play6上跑as2脚本,拿到当前流行的播放器版本和as3肯定效率是比不上的。如果要用在性能不是很强的嵌入式设备上。那么我们需要对每一行脚本,每一个矢量单元,每一张位图,每一个动作都要做出性能分析

一、As2的编码效率

所有被称为脚本语言(script language)都是解释运行,需要脚本引擎(解释器)支持识别。良好的脚步编码规范在脚本运行的效率就显的非常重要

变量

1、不要用长而复杂的名称,无论是movieclip实例名还是对象名,请用简短的名称

早期版本的flash play使用名称来索引对象,太长的对象名可能会较低效率

2_global全局变量的效率比较差,大量这种变量存取会严重影响脚本的执行效率

如:

_global.globalvar=”这是一个全局变量

使用这种方式定义的变量(globalvar)的存取效率很低,它在整个SWF文件中存在。除非你需要在任意时间线调用,否则不要用

结构

1、对于不变的取值,不要在循环内的存取

这种写法的效率就比较低下:

var myArray:Array = Array("item1", "item2", "item3");

mystr=”这是一个字符串”;

for(var i=0;i<array.length;i++){

       long=mystr.length;

}

array.lengthmystr.length被重复取值

高效率写法:

var myArray:Array = Array("item1", "item2", "item3");

var ilong=myArray.length;

mystr=”这是一个字符串”;

var long=mystr.length;

for(var i=0;i< ilong;i++){

}

 

2、循环内的逻辑和算法越简单越好,尽量不要在循环内放条件分支

这种写法的效率就比较低下

for(i=0;i<1000;i++){

if(x==0){

           y=i*2;           

}

}

if(x==0)

{

       for(i=0;i<1000;i++){

              y=i*2;

}

}

运算与算法

1、不要试图使用浮点数做运算,推荐使用定点数(FIXED)进行相关的运算

2、位运算要优于算数运算

因此加入位运算能显著提高执行效率,但是可读不强

如:

取整: a>>0

2 : a>>1

3、不要把大量的常数运算丢给程序来做

比如 var num=100+10*3200/32

4、我推荐使用魔鬼数字,加注释可以抵消魔鬼数字带来的坏处

as2中使用魔鬼数字没什么不好,我们只能使用比较多的注释来提升as2代码的克读性

5、函数调用会影响你的脚本执行效率,你需要评估你的函数封装所带来的效率问题,虽然它的可读性比较好

函数调用。连续调10000

stop();

itimer=getTimer();

function getNumber():Number{

       nRadom = 100*Math.random();

       return nRadom;

       }

for(var i=0;i<10000;i++){

       inewnumb= getNumber();                   //连续调用10000次比下面那行的写法要慢3

       //inewnumb= 100*Math.random();

 

}

itimer1=getTimer();

trace(itimer1-itimer);

6、不要给函数设定太多的参数,否则会影响函数的执行效率

7、不要使用递归

API调用

1、 不要试图自己去实现As2已有的API函数,特别是那些内建API(native code)。除非你能确定你的实现比它要快很多,但是你可能达不到它的效率。多多查询自己能用的API函数,API函数和你自己的函数的执行效率是完全不一样的

2、 不推荐使用组件来建立你的应用

数组

1、数组遍历推荐使用fori in array{}

2、索引数组比关联数组处理要快很多,当然没多少人会把索引数组和关联数组混用,关联数组被用做为哈希表

字符串

1、使用string.indexof(“key”)来处理字符的条件分支

2、使用重载符+号连接字符串比使用concat连接字符串要快50%

3、用数组array.join方法连接字符串比+连接字符串又要快些

 

二、设计及动画效率

事实上,在低效率的播放器版本和设备上,Adobe的官方推荐使用位图来构建swf内容。

位图大小是影响动画效果的一个因素。使用有透明通道的图片比不带透明通道的图片的处理效率更低。矢量图(有较多细节的)远比位图(有较多细节)处理的慢。请不要试图把位图转矢量图来用。

补间动画的效率比代码驱动动画的效率高。影片剪辑的效率要优于类操作效率,特别是在动画

三、其他

Flash play6以上的版本可以压缩你的swf内容发布,与其说是压缩不如称为加密。压缩的swf内容在加载时的效率比较低。但压缩的内容能更好的保护swf的内容。如果你不关注版权的话 ,不要压缩swf发布。

posted on 2010-07-10 15:57  随水流  阅读(355)  评论(0)    收藏  举报

导航