有一个小网页从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更好/更好的方法?
答案 0 :(得分:1)
我不知道这是问题所在,但如果到服务器的往返,加上解析以及您在process_xml
中所做的其他事情需要超过500毫秒,那么您和#39; ll会同时处理几个飞行中的请求,这最终会阻塞管道(浏览器对可同时处理的数量有限制)。在完成所有工作后,您最好在setTimeout
处理程序中调用onreadystatechanged
。