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