写游戏只要有思路,就能实现,但这也只是从功能角度出发,能不能有好的效率,才是关键,于是想积累一些关于优化方面的知识。
关于AS3 FOR内循环的优化
当我们遍历一个数组的时候 ,你可能会这样写
private function testFor() : void
{
var tmpVar:int;
for(var i:Number=0; i {
tmpVar = testArray[i];
}
}
执行这个函数50次,所用的时间是53.34毫秒。
如果我们将number类型改成int类型,如下
for(var i:int=0; i
这样所执行的时间是35.58毫秒。
如果先把数组的长度计算出来,速度会更快
var l:int = testArray.length;
for(var i:int=0; i
这个仅仅用了21.6毫秒
所以在for循环上int比number快,将length在循环外事先定义出来比直接写在for条件语句里面要快。
再看两段代码
var tmpVar:int;
for(var i:Number=0; i<100000; i++)
{
tmpVar = SomeClass.SOME_CONSTANT;
}
和
var tmpVar:int;
var myConstant:int = SomeClass.SOME_CONSTANT;
for(var i:Number=0; i<100000; i++)
{
tmpVar = myConstant;
}
前者的运行速度是34.08毫秒,后者的速度是 15.8毫秒
所以说 在FOR循环外先取到类属性,比拿到FOR循环内再去取类的属性的速度要快
变量在FOR内的定义
for(var i:int=0; i<100000; i++)
{
var v1:Number=10;
var v2:Number=10;
var v3:Number=10;
var v4:Number=10;
var v5:Number=10;
}
这个FOR需要用46.52毫秒,如果你用一个 var 去定义所有,将这些变量写成一行,像这样
for(var i:int=0; i<100000; i++)
{
var v1:Number=10, v2:Number=10, v3:Number=10, v4:Number=10, v5:Number=10;
}
执行之间缩短到 19.74
所以 在FOR循环内 尽量减少var这个关键字出现的次数,会提高效率
逻辑运算符的适当运用也会提高效率的
for(var i:int=0; i<100000; i++)
{
var val1:int = 4 * 2;
var val2:int = 4 * 4;
var val3:int = 4 / 2;
var val4:int = 4 / 4;
}
这段执行时间为 49.12 毫秒, 如果换成下面的代码,将会降到 35.56 毫秒
for(var i:int=0; i<100000; i++)
{
var val1:int = 4 << 1;
var val2:int = 4 << 2; var val3:int = 4 >> 1;
var val4:int = 4 >> 2;
}
关于AS3 FOR内循环的优化
当我们遍历一个数组的时候 ,你可能会这样写
private function testFor() : void
{
var tmpVar:int;
for(var i:Number=0; i {
tmpVar = testArray[i];
}
}
执行这个函数50次,所用的时间是53.34毫秒。
如果我们将number类型改成int类型,如下
for(var i:int=0; i
这样所执行的时间是35.58毫秒。
如果先把数组的长度计算出来,速度会更快
var l:int = testArray.length;
for(var i:int=0; i
这个仅仅用了21.6毫秒
所以在for循环上int比number快,将length在循环外事先定义出来比直接写在for条件语句里面要快。
再看两段代码
var tmpVar:int;
for(var i:Number=0; i<100000; i++)
{
tmpVar = SomeClass.SOME_CONSTANT;
}
和
var tmpVar:int;
var myConstant:int = SomeClass.SOME_CONSTANT;
for(var i:Number=0; i<100000; i++)
{
tmpVar = myConstant;
}
前者的运行速度是34.08毫秒,后者的速度是 15.8毫秒
所以说 在FOR循环外先取到类属性,比拿到FOR循环内再去取类的属性的速度要快
变量在FOR内的定义
for(var i:int=0; i<100000; i++)
{
var v1:Number=10;
var v2:Number=10;
var v3:Number=10;
var v4:Number=10;
var v5:Number=10;
}
这个FOR需要用46.52毫秒,如果你用一个 var 去定义所有,将这些变量写成一行,像这样
for(var i:int=0; i<100000; i++)
{
var v1:Number=10, v2:Number=10, v3:Number=10, v4:Number=10, v5:Number=10;
}
执行之间缩短到 19.74
所以 在FOR循环内 尽量减少var这个关键字出现的次数,会提高效率
逻辑运算符的适当运用也会提高效率的
for(var i:int=0; i<100000; i++)
{
var val1:int = 4 * 2;
var val2:int = 4 * 4;
var val3:int = 4 / 2;
var val4:int = 4 / 4;
}
这段执行时间为 49.12 毫秒, 如果换成下面的代码,将会降到 35.56 毫秒
for(var i:int=0; i<100000; i++)
{
var val1:int = 4 << 1;
var val2:int = 4 << 2; var val3:int = 4 >> 1;
var val4:int = 4 >> 2;
}