无尽的动画,requestAnimationFrame和调用堆栈限制

qub*_*yte 6 javascript requestanimationframe

我有一个正在处理的小项目,它使用了twitter流API,并从中制作了一些画布动画。鉴于Twitter流API尚未结束,该动画可以无限期进行。

问题就出在这里。requestAnimationFrame似乎是通过递归操作的,直到ES6,我们才得到正确的尾调用,这意味着我认为这会增加每一帧的调用堆栈。

问题是,我是否正确,这最终会导致超出最大调用堆栈大小的错误,还是浏览器在耍花招以避免限制?requestAnimationFrame真的是在做一些我不理解的奇怪事情(也许是在setInterval不递归的过程中)吗?

在Chrome 36.0.1985.32 Beta(调用堆栈大小为20834)中,我正在测试:

function test(t) {
    requestAnimationFrame(test);
}

test(performance.now());
Run Code Online (Sandbox Code Playgroud)

并没有发现任何问题。我希望RangeError假设以60fps的速度拍摄约6分钟。

chrome开发人员工具窗口的“调用堆栈”部分中显示了另一个令人误解的信息,在该处显示了requestAnimationFrame调用堆栈,因为它将填充堆栈,如下图所示:

在此处输入图片说明

小智 5

RAF 将启动“在下一个绘制帧上”的功能。这意味着它将在另一个动作堆栈中执行,并且您不会有任何最大调用堆栈错误。