Pay for Hesitation: 最佳化ActionScript 3.0數值運算

Pages

2008年3月28日 星期五

最佳化ActionScript 3.0數值運算

1. a += b 比 a = a + b 快, 同樣地, a++ 也比a = a + 1快, 但a--並不比 a = a - 1 快.

2. 在做除以2的operation時, 乘法比除法快, 而byte operation又更快. 但不要將byte operation用在Number類型的變數, 因為它還要將Number類型的數值先轉為整數型態.

for Int : a = b >> 1 faster than a = b * 0.5 faster than a = b / 2 ;
for Number : a = b * .5 faster than a = b / 2 ;

3. 想要取整數的時候, 用 unit() 或 int() 比用 Math.floor() 和 Math.ceil() 要快, 其中用 uint(n) 比 Math.floor(n) 要快10倍, 例如,

var test:uint = uint(1.5); 比 var test:Number = Math.floor(1.5); 還快,
var test:uint = uint(1.5) + 1; 比 var test:Number = Math.ceil(1.5); 快.

但如果是 Math.floor(),用byte operation (>>0) 比 unit() 或 int() 都快!!

4. 取絕對值時, *(-1) 比 Math.abs 要快, 例如,
var test:Number = n < 0 ? n * (-1) : n; 比 var test:Number = Math.abs(n); 還快.

5. n+n 比 n*2 快!

6. Math.sqrt()的替代演算法.
參考: http://osflash.org/as3_speed_optimizations#as3_speed_tests

沒有留言: