在條件中抽取出計算
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 的消耗也比較大