关闭。这个问题需要详细或明确。它目前不接受答案。
<hr class=“my12大纲无baw0 bb bc-POWER-400”/
想改进此问题吗?通过编辑此帖子添加详细信息并澄清问题。
两年前关闭
改进这个问题
如何检查我的javascript的fps?我正在使用它来循环:
gameloopId=setInterval(gameLoop,10);
@Slaks的代码只提供最后一帧的瞬时FPS,可能会因打嗝而变化或误导。我更喜欢使用易于编写和计算的低通滤波器来消除快速瞬变,并显示最近结果的合理伪平均值:
//此值越高,fps反映的临时变化越少
//值1将仅保留最后一个值
var滤波器强度=20;
var frameTime=0,lastLoop=new Date,thisLoop;
函数gameLoop(){
// ...
var thisFrameTime=(thisLoop=新日期)-lastLoop;
frameTime+=(thisFrameTime-frameTime)/filterStrength;
lastLoop=thisLoop;
}
//仅每秒报告一次fps,以仅轻微影响测量
var fpsOut=document.getElementById('fps');
setInterval(函数(){
fpsOut.innerHTML=(1000/帧时).toFixed(1)+“fps”;
},1000);
此过滤器的“半衰期”从旧值移动一半到新的稳定值所需的帧数为filterStrength*Math.log(2)(大约为强度的70%)
例如,20的强度将在14帧中移动一半,在28帧中移动3/4,在46帧中移动90%,在92帧中移动99%。对于以大约30fps速度运行的系统,性能的突然、剧烈变化将在半秒钟内变得明显,但仍然会“抛出”y’单帧异常,因为它们只会将值移动差异的5%
下面是一个30帧左右的游戏的不同过滤强度的视觉比较,该游戏的过滤速度瞬间下降到10帧,然后再上升到50帧。正如您所看到的,较低的过滤值可以更快地反映“良好”的变化,但也更容易出现暂时的打嗝:
最后,这里是一个使用上述代码对“游戏”循环进行实际基准测试的示例