【问题标题】:Repeated AJAX requests slow browser重复的 AJAX 请求慢速浏览器
【发布时间】:2014-12-02 17:28:43
【问题描述】:

有一个从 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 不同/更好的方法?

【问题讨论】:

  • 在该函数中使用var 声明“xmlhttp”变量是一个非常好的主意。没有它,它是一个全局变量,并且对“process_xml”的连续调用会覆盖其先前的值。
  • 谢谢!我不知道,我已经做出了改变。我继承了这段代码,并一直在慢慢更新它。
  • getData 不在您的代码中并且未从 process_xml 调用 getXTE 对吗?您能否确认这一点或修复您的示例(可能包括修复 XTEVal 和 dataVal)
  • @rene 感谢您的关注。在我的实际代码中,调用 getXTE 而不是 getData。我正在简化 SO 的代码,却忘记将 getXTE 函数更改为 getData。
  • 在 php 中同时调用 ajax 的会话锁是一个已知问题,不确定它是否与 SSI 相同。

标签: javascript jquery ajax ssi


【解决方案1】:

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

【讨论】:

  • 我已经做出改变,但没有雪茄。运行一分钟左右后它仍然会变慢。
  • 问题是只存在于火狐还是所有浏览器?
  • Chrome 好像没有受到影响。但很难确定,因为问题是零星的。
猜你喜欢
  • 1970-01-01
  • 2012-04-14
  • 1970-01-01
  • 1970-01-01
  • 2012-05-10
  • 2019-06-15
  • 2012-01-30
  • 2016-09-14
  • 1970-01-01
相关资源
最近更新 更多