Flashlizi's blog-专注Flash相关开发
posts - 22, comments - 17, trackbacks - 0, articles - 0
IT博客
::
首页
::
新随笔
::
联系
::
聚合
::
管理
AS3的一些优化计算方法
Posted on 2007-09-10 15:34
flashlizi
阅读(467)
评论(0)
编辑
收藏
引用
所属分类:
AS3
今天在John Grden的Blog上看到一篇关于AS3优化计算的文章:
Optimizations for AS3 calculations
,觉得不错,把其中的一些方法记录下来。
1、用乘法来代替除法(当除数可转化为有限数的时候)。
比如var n:Number = value *0.5;要比var n:Number = value / 2;快。但差别并不是很大。只有在需要大量计算情况下,比如3D引擎中差别才比较明显。
2、用位运算代替除2或乘2。
比如10>>1要比10*2快,而10<<1要比10*2快。从测试来看位运算几乎比乘除快一倍,但是一般情况下,我们不能选择位运算,比如我们就不能用13>>1来代替13/2,尽管前者比后者运算速度更快,但2者的运算结果却不一样。所以还是要看具体情况。
3、用unit()或int()代替取整运算Math.floor()和Math.ceil()。
比如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(),还可以用位运算(>>0)来代替。比如var test:uint =1.5>>0,比unit()或int()更快。
4、用乘-1来代替Math.abs()方法。
比如var nn:Number = -23;var test:Number= nn < 0 ? nn * -1 : nn;要比var nn:Number = -23;var test:Number = Math.abs(nn);快。
当然还有更多的优化计算的方法。一般来说,低级运算要比高级运算速度;内部方法比调用其他方法速度快。另外要注意的是,这些方法有的时候可能并一定适用。
附上测试代码:
import
flash.utils.getTimer;
var time:Number
=
getTimer();
function runDivisionTest():
void
{
time
=
getTimer();
for
(var i:Number
=
0
; i
<
10000000
; i
++
)
{
var test:Number
=
i
/
2
;
}
trace(
"
DivisionTest:
"
, (getTimer()
-
time));
}
function runMultTest():
void
{
time
=
getTimer();
for
(var i:Number
=
0
; i
<
10000000
; i
++
)
{
var test:Number
=
i
*
.
5
;
}
trace(
"
MultTest:
"
, (getTimer()
-
time));
}
function runBitTest():
void
{
time
=
getTimer();
for
(var i:
int
=
0
; i
<
10000000
; i
++
)
{
var test:
int
=
i
>>
1
;
}
trace(
"
BitTest:
"
, (getTimer()
-
time));
}
function runFloorTest():
void
{
time
=
getTimer();
for
(var i:uint
=
0
; i
<
10000000
; i
++
)
{
var n:Number
=
1.5
;
var test:Number
=
Math.floor(n);
}
trace(
"
FloorTest:
"
, (getTimer()
-
time));
}
function runUintTest():
void
{
time
=
getTimer();
for
(var i:uint
=
0
; i
<
10000000
; i
++
)
{
var n:Number
=
1.5
;
var test:uint
=
uint(n);
}
trace(
"
UintTest:
"
, (getTimer()
-
time));
}
function runCeilTest():
void
{
time
=
getTimer();
for
(var i:uint
=
0
; i
<
10000000
; i
++
)
{
var n:Number
=
1.5
;
var test:Number
=
Math.ceil(n);
}
trace(
"
CeilTest:
"
, (getTimer()
-
time));
}
function runUintCeilTest():
void
{
time
=
getTimer();
for
(var i:uint
=
0
; i
<
10000000
; i
++
)
{
var n:Number
=
1.5
;
var test:uint
=
n
==
uint(n)
?
n : uint(n)
+
1
;
}
trace(
"
UintCeilTest:
"
, (getTimer()
-
time));
}
function runABSTest():
void
{
time
=
getTimer();
for
(var i:uint
=
0
; i
<
10000000
; i
++
)
{
var n:Number
=
-
1.5
;
var test:Number
=
Math.abs(n);
}
trace(
"
ABSTest:
"
, (getTimer()
-
time));
}
function runABSMultTest():
void
{
time
=
getTimer();
for
(var i:uint
=
0
; i
<
10000000
; i
++
)
{
var n:Number
=
-
1.5
;
var test:Number
=
n
<
0
?
n
*
-
1
: n;
}
trace(
"
ABSMultTest:
"
, (getTimer()
-
time));
}
runDivisionTest();
runMultTest();
runBitTest();
runFloorTest();
runUintTest();
runCeilTest();
runUintCeilTest();
runABSTest();
runABSMultTest();
只有注册用户
登录
后才能发表评论。
Powered by:
IT博客
Copyright © flashlizi
日历
<
2009年12月
>
日
一
二
三
四
五
六
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
公告
因ZF禁止私自开设互动性质网站的原因,本人原来的blog网站:www.flashrek.com无限期暂停。而且虚拟空间访问速度慢,故在此开博,以后所有文章均在此发布。
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(3)
给我留言
查看公开留言
查看私人留言
随笔分类
(20)
AIR(1)
AJAX(5)
AS2(6)
AS3(7)
AS3设计模式(1)
Flex
随笔档案
(22)
2007年12月 (1)
2007年11月 (4)
2007年10月 (1)
2007年9月 (16)
搜索
最新评论
1. re: Input的特殊事件onpopertychange和oninput
事实上是事实是事实飒飒
--发发发发发发发发发发发发发发发发发发发发
2. re: Input的特殊事件onpopertychange和oninput
fefefe
--fefe
3. re: 在firefox中获取网页里的SWF对象
评论内容较长,点击标题查看
--17作业
4. re: AS3设计模式之一:单例模式(Singleton Pattern)
总结的很好,分享到我的博客喽!
--老姜
5. re: 游戏开发者的AS3数据结构
HAO
--GGGG
阅读排行榜
1. Input的特殊事件onpopertychange和oninput(7238)
2. AS3设计模式之一:单例模式(Singleton Pattern)(3646)
3. FlashTail:简单实用的Actionscript调试工具(3134)
4. 游戏开发者的AS3数据结构(3132)
5. 在firefox中获取网页里的SWF对象(3027)
评论排行榜
1. 谈谈Actionscript中的惰性函数定义模式(Lazy Function Definition)(6)
2. FlashTail:简单实用的Actionscript调试工具(4)
3. AS3设计模式之一:单例模式(Singleton Pattern)(2)
4. Input的特殊事件onpopertychange和oninput(2)
5. AS2:实现动态文本的描边及阴影效果(1)