使用setInterval更新数据的正确方法

时间:2016-08-12 19:23:54

标签: javascript asynchronous single-page-application polling

我有一个从外部来源获取数据的应用。每隔5-10分钟,我想重新查看是否需要更新应用程序的状态。

使用setInterval()长时间超时(如300s或其他什么)更新并更新,或者更好地轮询每个1s,然后检查最后一次更新完成,如果新数据超过5分钟,则获取新数据。

从性能的角度来看,如果一个人比另一个人好,我从来没有真正正确地实现过这个。

3 个答案:

答案 0 :(得分:2)

无论您的需求是什么,您通常都不想使用setInterval来实现这一目标,这是一条通往竞争条件的滑路(想象一下,如果 - 对于某些网络怪癖 - 第一个setInterval返回 下一个之后)。您想使用setTimeout

function update() {

  fetch(url).then(function(response) {
    return response.json();
  }).then(function(json) {
    // ... do something with your json ...
    setTimeout(update, 1000); // <-- now that this call is done, 
                              //     we can program the next one
  }).catch(function(err) {
    // Error :(
    setTimeout(update, 1000); // <-- there was a network problem, 
                              //     but still, program the next one!
  });


}

update();

此示例使用新的Fetch API,但它应该在任何情况下提出要点。

这就是说,因为你需要每5分钟获得一次新数据,所以只需要使用很长的超时时间。如上所述,您将使用5 * 60 * 1000而不是1000。

答案 1 :(得分:1)

第一种方式更适合性能。第二种方式会对服务器发出299个不必要的请求。

答案 2 :(得分:0)

案例1:完全取决于您的申请。看看你是否已经制作了像fb,whatsapp这样的实时应用程序,那么每3/5分钟更新一次是不好的,因为用户将被告知延迟。

案例2:假设您已经制作了应用程序,它可以为您提供当前温度,然后每隔3/5分钟就可以调用它。 这完全取决于您的应用程序功能。

你可以使用socket.io。