61,115
社区成员
发帖
与我相关
我的任务
分享
setTimeout("testFun()", 1000);
function testFun()
{
var url = "";
url += '../cgi-bin/Http.cgi';
url += '?';
url += '1' + "," + Math.random();
var xmlhttp = null;
if(window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
}
else{
xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
}
xmlhttp.onreadystatechange = function(){
if((xmlhttp.readyState == 4) && (xmlhttp.status == 200))
{
$("h1").text(xmlhttp.responseText);
}
}
xmlhttp.open("GET", url, false);
xmlhttp.setRequestHeader('If-Modified-Since', '0');
xmlhttp.send();
xmlhttp = null; //这里把它指空没用
setTimeout("testFun()", 1000);
}
function testFun()
{
var url = "";
var xmlhttp = null;
if(window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
//$("h1").text(xmlhttp + "*" +Math.random());
}
else{
xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
}
setTimeout(testFun, 10);
}
setTimeout(testFun, 1000);
经过测试在不断创建局部xmlhttp不会对内存有任何影响。xmlhttp 不用使用delete
第二部:测试 xmlhttp.open("GET", url, true); 打开连接是否占用内存,测试代码:
function testFun()
{
var url = "";
var xmlhttp = null;
if(window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
//$("h1").text(xmlhttp + "*" +Math.random());
}
else{
xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
}
xmlhttp.open("GET", url, true);
setTimeout(testFun, 10);
}
setTimeout(testFun, 1000);
测试结果,不断的打开链接,不会对内存造成影响。
第三步:发送 send请求,代码如下:function testFun()
{
var url = "";
var xmlhttp = null;
if(window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
//$("h1").text(xmlhttp + "*" +Math.random());
}
else{
xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
}
xmlhttp.open("GET", url, true);
xmlhttp.send(null); //此句导致内存泄露
setTimeout(testFun, 10);
}
setTimeout(testFun, 1000);
发现内存在减少并且,是以12k的大小在减少(一段时间)。
我所尝试的解决方法:function testFun()
{
var url = "";
//url += '../cgi-bin/getDataFromHttp.cgi';
//url += '?';
//url += '1' + "," + Math.random();
var xmlhttp = null;
if(window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
//$("h1").text(xmlhttp + "*" +Math.random());
}
else{
xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
}
xmlhttp.onreadystatechange = function(){
if(xmlhttp.readyState == 1) //open
{
$("h1").text(xmlhttp.readyState + "*" +Math.random());
}
else if(xmlhttp.readyState == 2) //send
{
$("h2").text(xmlhttp.readyState + "*" +Math.random());
$("h3").text(xmlhttp.readyState + "*" +Math.random());
// xmlhttp.abort(); 不能解决问题
//xmlhttp = null; 不能解决问题
// $("h4").text(XMLHttpRequest + "*" +Math.random());
// delete xmlhttp; 不能解决问题
}
//
}
xmlhttp.open("GET", url, true);
xmlhttp.setRequestHeader('If-Modified-Since', '0');
xmlhttp.send(null); //此句导致内存泄露
//xmlhttp = null; 不能解决问题
setTimeout(testFun, 10);
}
setTimeout(testFun, 1000);
以上代码都可以大家都可以测试,看看send问题到底怎么解决,我还在尝试,谢谢大家了。