Javascript 每五秒钟调用一次请求动画帧

Javascript 每五秒钟调用一次请求动画帧,javascript,requestanimationframe,Javascript,Requestanimationframe,如果我需要不断地获取一些新数据,我知道最好的解决方案是WebSocket。这样,当有新数据时,服务器会通知客户端。但是为了避免这种情况,我需要每五秒钟调用一次http请求 我在这里使用计数器只是为了模拟,而不是调用一些http服务 let counter = 0; setInterval(() => { console.log(counter); ++counter; },5000) 我读过,更好的解决方案是requestAnimationFrame,而不是setInterval

如果我需要不断地获取一些新数据,我知道最好的解决方案是WebSocket。这样,当有新数据时,服务器会通知客户端。但是为了避免这种情况,我需要每五秒钟调用一次http请求

我在这里使用计数器只是为了模拟,而不是调用一些http服务

let counter = 0;
setInterval(() => {
  console.log(counter);
  ++counter;
},5000)
我读过,更好的解决方案是requestAnimationFrame,而不是setInterval。它更受浏览器的优化,而且当选项卡未激活时,它会暂停。“设置间隔”在选项卡未处于活动状态时继续启动,这是不好的


如何每五秒钟调用requestAnimationFrame中的某个函数?

要真正每五秒钟调用一次,您仍然需要(至少)
setTimeout
。但有了这一点,以下几点就行了:

requestAnimationFrame(函数运行(){
log('do something w/o initial delay');
setTimeout(函数(){
log('do something w/initial delay');
requestAnimationFrame(运行);
}, 5000);

});Tnx Yoshi,谢谢您的回复。我接受了你的答案,因为它是有效的。这是唯一的方法吗?@pece或多或少
requestAnimationFrame
没有计时功能,因为您通常希望尽可能频繁地调用它以确保良好的fps(~60)。如果这不是你的目的,你需要解决这个问题,并且只需要每隔一段时间打电话。请注意,代码是有效的,但我可能永远不会以这种方式使用
requestAnimationFrame
。我坚持使用简单的
setTimeout
s。巧合的是,您可以将上述代码中的
requestAnimationFrame
替换为
setTimeout
,而不改变任何行为。