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.length和mystr.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、数组遍历推荐使用for(i in array){}
2、索引数组比关联数组处理要快很多,当然没多少人会把索引数组和关联数组混用,关联数组被用做为哈希表
字符串
1、使用string.indexof(“key”)来处理字符的条件分支
2、使用重载符+号连接字符串比使用concat连接字符串要快50%
3、用数组array.join方法连接字符串比+连接字符串又要快些
二、设计及动画效率
事实上,在低效率的播放器版本和设备上,Adobe的官方推荐使用位图来构建swf内容。
位图大小是影响动画效果的一个因素。使用有透明通道的图片比不带透明通道的图片的处理效率更低。矢量图(有较多细节的)远比位图(有较多细节)处理的慢。请不要试图把位图转矢量图来用。
补间动画的效率比代码驱动动画的效率高。影片剪辑的效率要优于类操作效率,特别是在动画
三、其他
Flash play6以上的版本可以压缩你的swf内容发布,与其说是压缩不如称为加密。压缩的swf内容在加载时的效率比较低。但压缩的内容能更好的保护swf的内容。如果你不关注版权的话 ,不要压缩swf发布。
浙公网安备 33010602011771号