AS3.0 中的一些優化操作


在條件中抽取出計算
var x: Number = 0;
while( x++ < 1000 )
{
    // do something
}
 
var x: Number = 0;
while( x < 1000 )
{
    x++;
    // do something faster
}
 
if( ( z = iz * 100 ) < 0 )
{
    // do something
}
 
z = iz * 100;
 
if( z < 0 )
{
    // do something faster
}


private function method1() : void
{
    var tmpVar:int;

    for(var i:Number=0; i<testArray.length; i++)
    {
        tmpVar = testArray[i];
    }
}
53.34 ms

for(var i:int=0; i<testArray.length; i++)
35.58 ms
var l:int = testArray.length;
for(var i:int=0; i<l; i++)
21.6 ms


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 ms
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 ms


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 ms
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;
}
非常小

x = int(1.232)

//equals:
x = 1.232 >> 0;


Assignment ( var a:TYPE = 0; )
int: 24-45ms
Number: 24-36ms
uint: 25-37ms

Statistically, they look the same, which is to be expected.

Assignment ( var a:TYPE = 0.5; )
int: 56-83ms
Number: 26-43ms
uint: 57-92ms

Predictably, Number is faster for fractional assignments, as the value does not need to be converted to an integer.

Division ( var a:TYPE = i/2; )
int: 60-105ms
Number: 34-64ms
uint: 184-278ms

Number is a much faster type for division, as expected from Sho's post. uint trails badly.

Multiplication ( var a:TYPE = i*2; )
int: 78-129ms
Number: 39-64ms
uint: 207-280ms

Similar results to division. I thought int might perform better as the value would never have to be converted to a float (whereas in division it would).

Addition ( var a:TYPE = i+2; )
int: 31-49ms
Number: 44-55ms
uint: 85-113ms

As expected from the plain iterator test, int is slightly faster for integer addition.

Bitshift ( var a:TYPE = i<<1; )
int: 31-63ms
Number: 61-114ms
uint: 71-130ms

 

第二種方法快20%
var t:int = a;
a = b;
b = t;

//equals:
a ^= b;
b ^= a;
a ^= b;

第二種方法快600%
x = 131 % 4;

//equals:
x = 131 & (4 - 1);

第二種方法快600%
isEven = (i % 2) == 0;

//equals:
isEven = (i & 1) == 0;


第三種比第二種快20%,第二種比第一種快2500%
//version 0
i = Math.abs(i);

//version 1
i = x < 0 ? -x : x;

//version 2
i = (x ^ (x >> 31)) - (x >> 31);

第二種方法快35%
eqSign = a * b > 0;

//equals:
eqSign = a ^ b >= 0;
原文地址:http://lab.polygonal.de/2007/05/10/bitwise-gems-fast-integer-math/


沒有對事件做監聽時不用派發事件   
override public function dispatchEvent(evt:Event):Boolean {
  if (hasEventListener(evt.type) || evt.bubbles) {
    return super.dispatchEvent(evt);
   }
  return true;
}

willTrigger 代替hasEventListener(evt.type) || evt.bubbles也許更好


BitmapData用完過後一定要BitmapData.dispose();
trace(System.totalMemory / 1024);
// output: 43100
// Create a BitmapData instance
var image:BitmapData = new BitmapData(800, 600);
trace(System.totalMemory / 1024);
// output: 44964
image.dispose();
image = null;
trace(System.totalMemory / 1024);
// output: 43084


矢量圖比位圖節約內存,但同時對CPU 的消耗也比較大

發佈了24 篇原創文章 · 獲贊 2 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章