Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2539547
  • 博文数量: 709
  • 博客积分: 12251
  • 博客等级: 上将
  • 技术积分: 7905
  • 用 户 组: 普通用户
  • 注册时间: 2005-07-17 00:00
个人简介

实现有价值的IT服务

文章存档

2012年(7)

2011年(147)

2009年(3)

2008年(5)

2007年(74)

2006年(431)

2005年(42)

分类: Java

2006-12-20 11:00:21

用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;
    }
  }

........

 };

阅读(3428) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~