Javascript 将setInterval与requestAnimationFrame一起使用

Javascript 将setInterval与requestAnimationFrame一起使用,javascript,google-chrome,requestanimationframe,Javascript,Google Chrome,Requestanimationframe,我想用setInterval来表示程序中的实际步骤,用requestAnimationFrame来表示渲染。我的印象是这将是一个完美的组合:渲染速度不会减慢实际进度,因此帧速率的下降只会影响帧速率,并且仍然同步。然而,我得到的是setInterval函数中的水滴 我的意思是,故意陷入阴影的一个例子: 减少或增加重新加注的次数,您将看到差异 看起来requestAnimationFrame实际上并不能解决渲染延迟减慢JavaScript的问题。那么,我将如何更新事物的逻辑方面,它可以以每秒60帧的

我想用
setInterval
来表示程序中的实际步骤,用
requestAnimationFrame
来表示渲染。我的印象是这将是一个完美的组合:渲染速度不会减慢实际进度,因此帧速率的下降只会影响帧速率,并且仍然同步。然而,我得到的是
setInterval
函数中的水滴

我的意思是,故意陷入阴影的一个例子:

减少或增加重新加注的次数,您将看到差异


看起来requestAnimationFrame实际上并不能解决渲染延迟减慢JavaScript的问题。那么,我将如何更新事物的逻辑方面,它可以以每秒60帧的速度完成,而不妨碍渲染?WebWorkers是绝对必要的吗?

问题是浏览器一次只能做一件事。因此,如果正在渲染,则无法更新位置

在做支持可变帧率的事情时,应该始终使用增量计时。它的工作原理如下:
requestAnimationFrame(函数(e){
document.getElementById('status').innerHTML=“增量时间:”+e;
//随机滞后
而(Math.random()>0.0000001){}
requestAnimationFrame(arguments.callee);
});

我想到了这一点,但男孩,这将是一个很大的工作。不过,我想这是必要的工作。我必须同意,这是一个整洁的特点;胜过JSFIDLE链接。实际上,使用增量计时比使用
setInterval
;)的代码要少我刚刚用.update()在所有内容上设置了一个循环,所以我需要开始传递它,并应用到相当多的数学工作中(远不止那个例子)。尽管如此,同步事情还是会有回报的。好答案是+1。不过,这是我见过的首次使用堆栈片段的啤酒!