As3.0的一些优化

As3.0的一些优化

我一直在钻研ActionScript的优化方案,并发现了一些非常有趣的结果。虽然在本文中没有什么新的知识,但文中一些部分参照了本文最后附上链接上的一些文章。

数据索引(Array indexing

我们来看遍历数组的例子:

private function method1():void

{

  var tmpVar:int;

  for(var i:Number=0;i<testArray.length;i++)

  {

   tmpVar=testArray[i];

}

}

让这个方法循环运行50次,得到的平均速度为53.34毫秒。现在将迭代变量i从Number类型改为int类型。

for(var i:int=0;i<testArray.length;i++)

这次的结果显示平均时间为35.58毫秒,这是因为使用int类型来检索数组会更快。我们还可以通过将数组长度(testArray.length)从for语句中分离出来。

var l:int=testArray.length;

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

需要的平均时间为21.6毫秒。

译者注:

  1. 比较:

int 类可使用表示32带符号整数的数据类型(Flex4.0 API)。用x表示一位,int即

xxxxxxxx  xxxxxxxx  xxxxxxxx  xxxxxxxx

Number 数据类型可使用多达 53 位来表示整数值(Flex4.0 API)。

那么用x来表示Number类型的位数,似乎一行难以写下。从表面上,便可以看出两者的效率问题。

  1. 位数越少,所占字节。

整数压缩的一种算法也利用了这一原则,(补充)

来自其他类的常量

另一种优化方法是使用来自其他类的常量。请看下面的例子:

var tmpVar:int;

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

{

   tmpVar=SomeClass.SOME_CONSTANT;

}

这段代码的执行时间为34.08。如果我们将常量从for循环中拿出来,见如下:

var tmpVar:int;

var myConstant:int=SomeClass.SOME_CONSTANT;

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

{

  tmpVar=myConstant;

}

现在只需要15.8毫秒。

变量的初始化。

以如下的风格初始化:

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;

}

共花费了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 i:int=0;i<100000;i++)

{

  var val1:int=4*2;

  var var2:int=4*4;

  var var3:int=4/2;

  var var4:int=4/4;

}

平均花费的时间为49.12毫秒,使用位移运算能使时间消耗下降至35.56毫秒。

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

{

  var val1:int=4<<1;

  var var2:int=4<<2;

  var var3:int=4>>1;

  var var4:int=4>>2;

}

原文连接

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

—————————————————————————————————————

译者心得

测试方式。

以前自己测试效率的步骤是:

(1)    第一次获取时间,

(2)    运行for语句,

(3)    第二次获取时间。

得到第一,二次时间差,即for语句的运行时间。

在上文,可以看到,作者采用的50次运算的平均时间。平均时间比运行一次的时间会显得更准确。因为运行一次,有可能受到某些因素的干扰。

 

 

posted @ 2012-11-25 17:04  Jack Tao  阅读(154)  评论(0编辑  收藏  举报