频繁刷新和内存问题XMLHttpRequest与jquery.ajax

芹菜大哥 2011-07-19 04:12:31
最近有个项目需要在页面上实时显示数据库中的内容(客户要求刷新频率1秒),先用jaquery.ajax试了一下,内存会随着刷新将次数的增长而增长,网上查了一下,很多人说是循环中的jquery.ajax不断创建新的XMLHttpRequest对象所致,于是自己又写了一个自己创建XMLHttpRequest对象处理请求的页面,发现web浏览器的内存还是不断增长中(ie6和ie8及firefox3.6.12),还望各位给看一下问题到底是出在什么地方?

/////////////////////////jaquery.ajax测试///////////////////////////////////////////
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Untitled Page</title>
<script type="text/javascript" src="jquery-1.6.2.js"></script>
<script type='text/javascript'>
var nCount = 1;
function chlink()
{
var strUrl = "GetStatus.ashx?Count="+nCount++;
$.ajax({
url: strUrl,
type: "get",
dataType: 'text',
cache: false,
success: function (data)
{
if( "Error"==data )
{
$("#date").html("Server status is error" );
}
else
{
$("#date").html("Serever status is normal" );
}

data = null;
}
});
strUrl = null;

setTimeout('chlink()',100);
}

$(document).ready(function()
{
chlink();
});
</script>
</head>
<body>
<div id="date"></div>
</body>
</html>



////////////////////////XMLHttpRequest的测试//////////////////////////////////
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Untitled Page</title>
<script type="text/javascript" src="jquery-1.6.2.js"></script>
<script type='text/javascript'>
var nCount = 1;
var req=null;
var READY_STATE_UNINITIALIZED=0;
var READY_STATE_LOADING=1;
var READY_STATE_LOADED=2;
var READY_STATE_INTERACTIVE=3;
var READY_STATE_COMPLETE=4;

function loadXMLDoc(url)
{
if( !req )
{
alert(url);
if (window.XMLHttpRequest)
{
req = new XMLHttpRequest();
}
else if (window.ActiveXObject)
{
req = new ActiveXObject("Microsoft.XMLHTTP");
}
if (req)
{
req.onreadystatechange = processReqChange;
}
}
//
if (req) {
//alert(url);
req.open("GET", url, true);
req.send(null);
}
}

function processReqChange()
{
var ready=req.readyState;
var data=null;
if (ready==READY_STATE_COMPLETE)
{
data = req.responseText;
//alert(data);
if( "Error"==data )
{
$("#ComputerDevice1").html("Server status is error" );
}
else
{
$("#ComputerDevice1").html("Serever status is normal" );
}
data = null;
//req = null;

setTimeout('GetContent()',1);
}
else
{
$("#date").html("NO"+nCount+" loading...["+ready+"]" );
}

}


function GetContent()
{
loadXMLDoc("GetStatus.ashx?Count="+(nCount++));
}

$(document).ready(function()
{
GetContent();
});
</script>
</head>
<body>
<div id="ComputerDevice1" class="DeviceNormal"><!-- onclick="changecss()">-->
</div>
<div id="date"></div>
</body>
</html>
...全文
517 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xwx520 2012-01-11
  • 打赏
  • 举报
回复
我之前做的一个用Ext 框架来做的Ajax访问也是一样,二十秒发起一起请求,十来分钟后整个网页反应就变得很慢了,后来在使用完XMLHTTPREQUEST后将其销毁,即XMLHTTPREQUEST = null; 反应慢的问题就不存在了。
芹菜大哥 2011-07-25
  • 打赏
  • 举报
回复
先回答楼上的问题:在页面上用图片实时显示某些设备的状态
今天结一下贴子,顺便说一下自己的测试结果:
我的机器内存是1G的,两种方式都设为100MS(1MS太快,可能CPU占用比较厉害),在IE8上两种方式内存都会一直增涨,涨到某个值时(56MB左右),基本会稳定下来,但是还是会涨(比之前慢多了);
在FF上的表现好一些,ajax方式也是内存涨到某个值时会稳定下来,直接创建XMLHttpRequest就表现的很好,基本不变;

虽然有结果了,但是上周去客户那里看他们对界面的要求比较高,决定用Silverlight来做了,顺便发一下招募要求,因为是私单,项目做完大家还是自由人,这点请谅解。
需要两个Silverlight程序员(全职,需要坐班),时间为2011年8月~2011年10月,待遇5K~9K(视你水平而定),有意者请与QQ83162218联系,敲门砖“Silverlight”,此招募2011年8月5日前有效,之后看到的就不要再加我了;
1.从事Silverlight相关工作1年以上。
2.熟悉Silverlight开发,能熟练运用常用的Silverlight控件。
3.熟练运用blend工具制作用户界面。
3.熟悉.NET平台技术,熟悉C#。
4.有图像处理或WinForms/GDI开发经验,熟悉Silverlight和XAML。
5.了解Socket通讯及Web Service/WCF。
6.有良好的程序架构设计和编程习惯。
7.有良好的学习能力、工作责任心和团队意识。
雨天要吃饭 2011-07-24
  • 打赏
  • 举报
回复
这实时性要求的确实又点高。
是证券交易类的系统吗?
豆虫 2011-07-20
  • 打赏
  • 举报
回复
这请求也太太太频繁了吧~~1s刷一次 前段够受的了~~
Go 旅城通票 2011-07-19
  • 打赏
  • 举报
回复
ff3测试还好啊,刚开始涨,涨到140m左右就稳定了。O(∩_∩)O~

你的请求太频繁了,1ms,建议改用flash的sokect来实现。
xuexiaodong2009 2011-07-19
  • 打赏
  • 举报
回复
调用一下试试clearTimeout
xuexiaodong2009 2011-07-19
  • 打赏
  • 举报
回复
setTimeout('GetContent()',1);
把这个的返回值记录一下,成功后clear一下试试
芹菜大哥 2011-07-19
  • 打赏
  • 举报
回复
现在的CSDN论坛已经败落至此了,半天都没有一个回复

52,797

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Ajax
社区管理员
  • Ajax
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧