有没有更好的方法可以在不使用setInterval的情况下创建异步更新

Is there a better way to create asynchronous updates without using setInterval?

本文关键字:setInterval 情况下 异步 更新 创建 方法 更好 有没有      更新时间:2023-09-26

我的网站有多个部分,每半秒检查一次更新,这样它就可以提醒你消息等。然而,我觉得使用带有setInterval的$.post可能会对网站造成一些负担。对于这些任务,是否有更好的替代方法推荐?

是的,尽管这不是小事。

更好的方法

你可以使用长轮询(或"彗星"),它打开一个连接,保持它打开20秒左右,然后立即重新打开它。服务器可以随时发送一些东西。

较新的浏览器提供websocket,它提供持久连接。

两者的代码都相对复杂,因此您需要某种框架来处理问题。此外,连接需要为每个用户保持开放,所以它只适用于像NodeJS这样的轻量级。

更简单的方法

如果你想要更容易实现的东西,我建议按照你的建议检查更新(它被称为短轮询,以与长轮询/websockets形成对比)。你可以这样做一个简单的轮询解决方案:

window.setInterval(function () {
  // More lightweight than $.post
  $.get('/datasource', function () {
    /* do something */
  }); 
}, 3000);

3秒的间隔时间以前曾被知名人士使用过。

如果速度变慢,请尝试在/datasource 中分析数据库查询

socket.io将是使用nodeJS的方法。否则,请检查这个jQuery插件,它实现了优雅的降级,尽管不如socket.io.全面。