Javascript的setInterval滞后于浏览器



我有一个实时聊天。我使用 setInterval 每 0.5 秒实时显示所有消息。但我注意到 setInterval 会冻结,有时会使浏览器崩溃。我听说 setTimeout 是最好的替代使用方式?

  setInterval(function(){
        $.ajax({
            url: "display_msg.php",
            method: "POST",
            data: {conn:conn},
            success: function(data) {
                $('#chatarea').html(data);
            }
        });
    },500);

您最好使用 setTimeout 它将等待上一个请求解析,然后再再次请求数据。

(function pollMessages() {
  $.ajax({
    url: "display_msg.php",
    method: "POST",
    data: {
      conn: conn
    },
    success: function(data) {
      $('#chatarea').html(data);
      setTimeout(pollMessages, 500)
    }
  });
})()

问题是setInterval每x毫秒调用一次该函数,并且,当您提交请求并且服务器需要一些时间来响应时,可能会发生多个请求并行执行的情况,从而给您的应用程序带来一些麻烦。

使用 setTimeout您只能在完成前一个请求后提交新请求。这会好得多。不要忘记编写一些代码来处理超时问题。

祝你好运!

最新更新