Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否需要在再次调用之前取消未完成的requestAnimationFrame?_Javascript_Performance_Animation_Browser_Requestanimationframe - Fatal编程技术网

Javascript 是否需要在再次调用之前取消未完成的requestAnimationFrame?

Javascript 是否需要在再次调用之前取消未完成的requestAnimationFrame?,javascript,performance,animation,browser,requestanimationframe,Javascript,Performance,Animation,Browser,Requestanimationframe,我正在研究requestAnimationFrame和cancelAnimationFrame 以及此处提供的各种聚填料: 使用这些函数的语义对我来说有点棘手。具体来说,假设您requestAnimationFrame(回调)一次。 如果要在调用第一个回调之前第二次请求动画帧(回调),是否需要调用cancelAnimationFrame?浏览器会重复调用回调吗?或者浏览器会自动将双倍通话替换为单次通话吗 我这么问是因为,requestAnimationFrame似乎帮不了什么忙。但我可能从多

我正在研究
requestAnimationFrame
cancelAnimationFrame

以及此处提供的各种聚填料:

使用这些函数的语义对我来说有点棘手。具体来说,假设您
requestAnimationFrame(回调)
一次。 如果要在调用第一个回调之前第二次
请求动画帧(回调)
,是否需要调用
cancelAnimationFrame
?浏览器会重复调用回调吗?或者浏览器会自动将双倍通话替换为单次通话吗

我这么问是因为,requestAnimationFrame似乎帮不了什么忙。但我可能从多个来源太快地调用了它。关于这一点的权威答案将非常好。

根据规范:

requestAnimationFrame仅计划对 基于脚本的动画。如果需要后续动画帧, 然后需要从内部再次调用requestAnimationFrame 回调

还请注意,对requestAnimationFrame的多个调用使用相同的 回调(在调用回调和清除列表之前)将 导致列表中的多个条目具有相同的回调, 因此将导致该回调被多次调用 动画帧


requestAnimationFrame
的调用将只安排一个回调调用。处理回调后,如果已删除回调列表中的条目,则会删除该条目。因此,您不必取消以前的调用。

初步测试似乎表明,在订购新的动画请求之前取消未完成的动画请求会使Firefox不那么滞后。这种效果可能会出现在任何浏览器上,其中重画事件的发生速度比动画触发速度慢。该规范似乎表明,如果要为同一帧安排两个调用(绘制相同的对象),则必须取消以前的请求,造成我观察到的减速。当然,如果你在同一帧中打多个电话,你只是在浪费时间。对不起,我没有仔细阅读这个问题。我不知道你是在一帧的背景下问这个问题的。