Flash专栏: 基础教程 | 技巧运用 | MTV实例教程 | 游戏实例教程 | 实例教程 | AS教程(new)
photoshop专栏: 基础 | 进阶 | 技巧总汇 | 精彩实例 | 文字特效 | 滤镜魔术 | 实际应用
网页设计: Dreamweaver教程 | FireWorks教程 | CorelDraw设计 | Freehand/Illustrator教程 | 音乐转换教程
其他教程: 操作系统 | 程序设计 | 网站开发 | 图形图像 | 数据库 | 网络技术 | 安全相关 | 认证考试 | 硬件知识 | 服务器
Flash专栏>Flash技巧运用>setInterval测试报告   返回上一页

  日期:2006-03-27 11 作者:xfykzz 来源:xfykzz BLOG
天气预报 IP地址 手机号码 邮编 翻译 在线代理 在线评书 好dj


setInterval测试报告


之前对于setInterval的一些性能多多少少也有些听闻,不过一直没有测试,今天我特意测试了一下,主要也是因为之前游戏的需要.得出了几个结论与建议.对测试过程没有兴趣的朋友可以直接跳过看后面的结论与建议.

  首先测试的是timer的递增对资源的影响.帧频为12fps.n=1,结果当timer递增时CPU与内存都缓慢递增,表明setInterval用得频繁对性能还是有一定影响的.

  程序代码:

var n:Number=10;
var timer:Number;
function test() {
    trace(timer);
    clearInterval(timer);
    timer = setInterval(test, n);
}
timer = setInterval(test, n);



  之后再测试对同一个setInterval,不同频率的n值时真正的频率,代码如下:

  程序代码:

var n:Number=10;
var timer:Number;	 
var old:Number=getTimer();
function test() {
    var m:Number=getTimer();
    trace(1000/(m-old));
    trace("----------------------------------");
    old=m;
}
timer = setInterval(test, n);

测试结果如下(平均结果,有随机的跃变,两个数字代表在两个数字之间跃变):

12fps:
n Hz
1 125
5 125
8 125
10 62.5
12 62.5
20 42
25 32,37
50 18
100 5.7
200 3.78(稳定)
500 1.89(稳定)
1000 0.946(稳定)
--------------------------
20fps:
n Hz
1 200
5 200
8 100
10 90,100
12 66.7
20 50(稳定)
25 40(稳定)
50 20
100 10
200 4.87
500 2
1000 0.97(稳定)
--------------------------
50fps:
n Hz
1 500(稳定)
5 166.7
8 111,125
10 91,100
12 76.9,83.3
20 47.6,50
25 23.8
50 20
100 10
200 4.87
500 2
1000 0.97(稳定)
--------------------------

  根据以上数据可以得出关于setInterval的三点结论:

  1. 时间间隔虽然由n指定,但是有一个"物理上限",到达某一间隔后再也不能缩小间隔了,比如12fps时的物理上限是125ms,即8fps.

  2. 间隔与帧频越接近,则误差越小.

  3. 当间隔增大到某一界限时,就变得比较稳定,且误差较小,与帧频无关.

  另外,根据实验数据还能得出以下三个结论:

  1. 当n值比较大时(比如n=1,5,8,10),无论帧频多少,在起初的几次间隔时间都比较大,然后才逐渐趋向于某一定值.

  2. 在n=10左右时间隔时间会有一次跃变,数值会突然下降原因未知.

  3. 大多数时候间隔数值会在几个数值之间跃变.

  综上,在使用setInterval时,其时间间隔参数真的只能起"参考作用",其具体数据是多少会因为各种情况而改变.因此我有以下三点建议:

  1. 不用的setInterval一定要用clearInterval把timer标识清除掉.

  2. n值不宜过高,太高则没有意义,对资源也会有额外浪费.

  3. 帧频宜与n值相距不大,帧频*n=1000左右是最好的效果.如果不行,宁愿让帧频高点.setInterval低点.

  来源:http://www.xfykzz.com/blog/blogview.asp?logID=275

(完)

编辑:eastecho


 
高手云集 版权所有 1998-2006