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