我每隔几秒钟重新加载一个页面以从服务器获得更新,这个页面可以打开,这可以永远发生 - 我猜,特别是因为这个浏览器是在一个没有关闭的远程服务器上。 / 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);
}
}
}
上面有什么问题吗?循环引用??
上面的函数调用如下:
<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>
答案 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修复了这个问题。
具体来说,我相信这是补丁......