重复的 AJAX 请求会降低浏览器速度

Repeated AJAX requests slow browser

本文关键字:浏览器 速度 请求 AJAX      更新时间:2023-09-26

有一个小网页从Web服务器请求XML文件。Web 服务器每秒更新此文件两次,其中包含要在网页上显示的新数据。

页面运行一段时间后,每当它从服务器获取新数据(每秒两次)时,它都会减慢整个浏览器的速度。问题是间歇性的 - 有时持续几秒钟,有时持续更长时间。

问题存在于火狐中。

function getData() {
  var dataVal = parseFloat($("#data").html().substring(0, 100));
  doSomethingWithVal(XTEval); // seemingly irrelevant, as it lags without this function too
}
t = 0.5;
function process_xml() {
  var xmlhttp = GetXmlHttpObject();
  if (xmlhttp === null) {
    alert("Your browser does not support AJAX!");
    return;
  }
  xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState === 4) {
      document.getElementById("data").innerHTML = xmlhttp.responseText;
      getData();
      setTimeout('process_xml()', t * 1000);  // moved from end of function to here based on a suggestion
    }
  };
  xmlhttp.open("GET", "data.shtml", true);
  xmlhttp.send("");
}
function GetXmlHttpObject() {
  if (window.XMLHttpRequest)
    return new XMLHttpRequest();
  if (window.ActiveXObject)
    return new ActiveXObject("Microsoft.XMLHTTP");
  return null;
}

data.shtml 只包含:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!--#echo var="someVal.val" -->

也许有一种比使用 AJAX 不同/更好的方法?

我不知道这是

问题所在,但是如果往返服务器,加上解析和您在process_xml中执行的其他所有操作需要超过 500 毫秒,那么您最终会同时收到多个正在进行的请求,这最终会堵塞管道(浏览器对可以同时处理的数量有限制)。 您最好在 onreadystatechanged 处理程序中调用您的setTimeout,完成其中的所有工作。