Javascript 使用requestAnimationFrame创建无限事件循环是否有性能成本

Javascript 使用requestAnimationFrame创建无限事件循环是否有性能成本,javascript,Javascript,如果我需要javascript中的事件循环永远运行(可能是在循环中查询RESTAPI),那么如果按照以下方式实现它,会有任何性能损失吗 function eventLoop() { // Call to REST api requestAnimationFrame(eventLoop); } requestAnimationFrame(eventLoop); 或者如图所示 requestAnimationFrame顾名思义,是用于渲染动画的。它的迭代速度高达60 fps左右。如果您正在轮询一个

如果我需要javascript中的事件循环永远运行(可能是在循环中查询RESTAPI),那么如果按照以下方式实现它,会有任何性能损失吗

function eventLoop() {
// Call to REST api
requestAnimationFrame(eventLoop);
}
requestAnimationFrame(eventLoop);
或者如图所示


requestAnimationFrame
顾名思义,是用于渲染动画的。它的迭代速度高达60 fps左右。如果您正在轮询一个API(可能需要花费大量时间才能返回响应),那么这听起来有点过分了

为什么不直接使用
setTimeout
?您可以轮询API,然后在返回请求时,可以选择再次轮询

var timer;

function pollAPI() {
    $.ajax({
      success: function(response) {
        if (response == 'something') {
            // do something
        } else {
            // poll again
            timer = setTimeout(pollAPI, 50);
        }
      }
    });
}

pollAPI();

这很好,但是如果你在互联网上做一些异步的事情,比如ajax调用,你应该在重新启动之前等待适当的时间,否则你会每秒向自己发送60个请求。

最好在前一个查询完成后触发下一个查询。您描述的方法将同时处理多个请求。
requestAnimationFrame
setTimeout
好得多,因为它提供了与CPU容量相关的最佳迭代次数。当窗口失去焦点时,它也会停止。对,但是O.P.指定他们试图在循环中查询RESTAPI。对于类似的情况,最好控制请求的数量,而不是以60 fps的速度触发多个请求。