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

时间:2014-12-02 17:28:43

标签: javascript jquery ajax ssi

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

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

Firefox中存在问题。

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更好/更好的方法?

1 个答案:

答案 0 :(得分:1)

我不知道这是问题所在,但如果到服务器的往返,加上解析以及您在process_xml中所做的其他事情需要超过500毫秒,那么您和#39; ll会同时处理几个飞行中的请求,这最终会阻塞管道(浏览器对可同时处理的数量有限制)。在完成所有工作后,您最好在setTimeout处理程序中调用onreadystatechanged