我有一个从外部来源获取数据的应用。每隔5-10分钟,我想重新查看是否需要更新应用程序的状态。
使用setInterval()
长时间超时(如300s
或其他什么)更新并更新,或者更好地轮询每个1s
,然后检查最后一次更新完成,如果新数据超过5分钟,则获取新数据。
从性能的角度来看,如果一个人比另一个人好,我从来没有真正正确地实现过这个。
答案 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。