刷新IE6内存泄漏?

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

我这样做:

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

上面的函数调用如下:

   var tasks = 'ab_1, ab_2, ab_3';   $(document).ready(function(){ recreateTicks(tasks); });  

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

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

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

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

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

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

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

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

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

通过阅读本页 ,您可以阅读有关如何减轻IE泄漏的更多信息。 您还应该查看JavaScript内存泄漏检测程序 (由Microsoft的全球产品团队编写)。 它可以帮助您找到泄漏,如果有的话。

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

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

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