用DWR的ajax技术实现页面的不停刷新造成ie内存泄漏的解决办法

 最近做一个实时监控系统,用到了ajax技术,采用了所谓比较成熟的开源框架dwr,但是页面用setTimeout(method,1000)每秒刷新一次,服务器端倒没问题,客户端ie占用内存猛增,关键是一直持续上涨,产生内存泄漏(memeory leak)。

我研究了一下DWR的engin.js,结果看到页面每次调用都产生一个新的XMLHttpRequest或者DWREngine._newActiveXObject(DWREngine._XMLHTTP)对象,所以将其改为全局变量,只产生一个即可。
同一个页面多次产生该对象内存将不会被系统回收,导致一直增长的情况发生,改动之后就没问题了。

改前的


/** @private Actually send the block of data in the batch object. */
DWREngine._sendData = function(batch) {
..................

  // Get setup for XMLHttpRequest if possible
  if (batch.method == DWREngine.XMLHttpRequest) {
    if (window.XMLHttpRequest) {
  batch.req =new XMLHttpRequest();
    }
    // IE5 for the mac claims to support window.ActiveXObject, but throws an error when it's used
    else if (window.ActiveXObject && !(navigator.userAgent.indexOf("Mac") >= 0 && navigator.userAgent.indexOf("MSIE") >= 0)) {
  batch.req = DWREngine._newActiveXObject(DWREngine._XMLHTTP);
    }
  }

........

 };

改后的:

var myActiveXObject=null;
var myXMLHttpRequest=null;
/** @private Actually send the block of data in the batch object. */
DWREngine._sendData = function(batch) {
..................

  // Get setup for XMLHttpRequest if possible
  if (batch.method == DWREngine.XMLHttpRequest) {
    if (window.XMLHttpRequest) {
  if(myXMLHttpRequest==null){
  //alert("myActiveXObject IS NULL ");
   myXMLHttpRequest=  new XMLHttpRequest();
  }
  batch.req =myXMLHttpRequest;
    }
    // IE5 for the mac claims to support window.ActiveXObject, but throws an error when it's used
    else if (window.ActiveXObject && !(navigator.userAgent.indexOf("Mac") >= 0 && navigator.userAgent.indexOf("MSIE") >= 0)) {
    if(myActiveXObject==null){
    myActiveXObject=DWREngine._newActiveXObject(DWREngine._XMLHTTP);
  }
  batch.req = myActiveXObject;
    }
  }

........

 };

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值