刷新IE6内存泄漏?

时间:2010-02-22 17:37:43

标签: javascript jquery internet-explorer internet-explorer-6

我每隔几秒钟重新加载一个页面以从服务器获得更新,这个页面可以打开,这可以永远发生 - 我猜,特别是因为这个浏览器是在一个没有关闭的远程服务器上。 / p>

我这样做:

setTimeout(function () {
        location.href = location.href; // forces a reload from the server
    }, 1000*10*0.5); 

我注意到IE6的内存使用量不断增加和增加。该页面除了刷新和显示html之外什么都不做。

为什么会这样?我怎么能解决这个问题呢?我不想崩溃IE6。

它在435,000K,大约30分钟。

全部谢谢

更新

对不起大家 - 每次加载页面时都会运行另一个函数:

function recreateTicks(tasks){

 if(tasks!=''){

  var myTicks = tasks.split(',');

  var length = myTicks.length;

  for(var i=0; i<length; i++){

   var element = myTicks[i];

   $('#'+element).attr('checked', true);

  }

 }

}

上面有什么问题吗?循环引用??

更新2

上面的函数调用如下:

<script type="text/javascript">
<!--PHP Generated-->
var tasks = 'ab_1, ab_2, ab_3';
</script>
<script type="text/javascript">
$(document).ready(function(){     
recreateTicks(tasks);
});
</script>

4 个答案:

答案 0 :(得分:7)

您确定该页面没有做任何事情吗?你没有(例如)有一些你附加到元素的事件处理程序?如果在unload事件期间没有明确地断开元素与其处理程序之间的连接,IE就会因泄漏内存而闻名。 (它不是通用的,处理程序必须引用某些东西,但通过闭包很容易实现它。)Crockford wrote up关于IE的内存泄漏的一些信息可能对你。

答案 1 :(得分:4)

好的,这有点争议,但为什么不让IE6崩溃?

您最终可以将大部分开发时间用于IE6问题 - 这是一个充其量迅速减少的市场。虽然它在企业领域严峻地存在,但无论如何,其余的用户都被大量糟糕的软件严重锁定。那些IE6用户将越来越认为他们的PC设置不合标准(而且是)。

为什么不让那些IE6用户崩溃?他们只会看到他们的PC变得越来越慢,而错误信息(当它出现时)是一个IE,而不是页面内的。

100%以客户为导向的质量方法有很多价值,开始让这些用户自己照顾自己是危险的,但对你来说重要的平衡是开发成本与奖励。

除非这些IE6用户(其浏览器一直崩溃)会注意到你的应用程序是问题并有能力阻止你销售它,那么你的开发成本加倍有什么价值呢?

最后,如果你真的想让IE6无泄漏那么就不要使用jQuery了。从头开始编写所有Javascript,并观看范围和各种IE6 DOM错误,如鹰。 jQuery使用扩展属性(在IE6中总是泄漏)并隐藏了一些你需要进行微管理的范围问题,如果你想让IE6不泄漏的话。

答案 2 :(得分:2)

IE6的内存时间非常糟糕。 IE7已经做了一些改进,甚至更多在IE8中。

正如TJ所说,循环引用可能导致这种情况发生(页面元素引用了一个引用该元素的javascript对象)。

通过阅读THIS PAGE,您可以阅读有关如何减轻IE泄漏的更多信息。您还应该查看The JavaScript Memory Leak Detector(由Microsoft的全球产品团队编写)。如果有的话,它会帮助您找到泄漏点。

答案 3 :(得分:0)

您确定拥有IE6的最新修补版本吗?我在公司局域网上遇到了同样的问题,并最终意识到桌面没有打补丁以保持与传统软件的兼容性。将它们带到最新版本的IE6修复了这个问题。

具体来说,我相信这是补丁......

http://support.microsoft.com/kb/929874/