Javascript IE6刷新时内存泄漏?
我每隔几秒钟重新加载一个页面以从服务器获取更新,此页面可以打开,并且这种情况可能永远发生-我猜,特别是因为此浏览器位于未关闭的远程服务器上 我这样做:Javascript IE6刷新时内存泄漏?,javascript,jquery,internet-explorer,internet-explorer-6,Javascript,Jquery,Internet Explorer,Internet Explorer 6,我每隔几秒钟重新加载一个页面以从服务器获取更新,此页面可以打开,并且这种情况可能永远发生-我猜,特别是因为此浏览器位于未关闭的远程服务器上 我这样做: setTimeout(function () { location.href = location.href; // forces a reload from the server }, 1000*10*0.5); 我注意到IE6的内存使用量不断增加。该页面除了刷新和显示html之外什么也不做 为什么会发生这种情况?我
setTimeout(function () {
location.href = location.href; // forces a reload from the server
}, 1000*10*0.5);
我注意到IE6的内存使用量不断增加。该页面除了刷新和显示html之外什么也不做
为什么会发生这种情况?我怎样才能克服这个问题?我不想撞坏IE6
现在是435000K,大约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);
}
}
}
函数重新创建标记(任务){
如果(任务!=''){
var myTicks=tasks.split(',');
变量长度=myTicks.length;
对于(var i=0;i您确定页面没有做任何事情吗?例如,您没有(例如)几个附加到元素的事件处理程序?IE因在unload
事件期间未显式断开元素与其处理程序之间的连接而闻名。(它不是通用的,处理程序必须有一个引用,但它很容易实现——例如通过一个闭包。)Crockford提供了一些关于IE内存泄漏的信息,这些信息可能对您有用。IE6在内存方面很糟糕。IE7做了一些改进,甚至在IE8中做了更多改进
正如TJ所说,循环引用可能导致这种情况发生(页面元素引用的javascript对象引用回该元素)
通过阅读,您可以了解更多有关如何缓解IE漏洞的信息。您还应该查看(由Microsoft全球产品团队撰写)。它将帮助您找到漏洞(如果有)。您确定您有最新的IE6修补版本吗?我在一个公司局域网上遇到了同样的问题,并最终意识到台式机未修补以保持与旧版软件的兼容性。将它们升级到最新版本的IE6解决了此问题
具体来说,我相信这就是补丁
好吧,这有点争议,但为什么不让IE6崩溃呢
你可以把大部分的开发时间花在IE6问题上——这是一个充其量也在迅速萎缩的市场。虽然IE6在公司空间中占据着严峻的地位,但剩下的用户却被大量糟糕的软件所束缚。这些IE6用户将越来越多地感觉到他们的PC设置不符合标准(事实确实如此)
为什么不让那些IE6用户崩溃呢?他们只会看到他们的电脑越来越慢,错误信息(当它出现时)是一条IE信息,而不是第一页中的信息
100%以客户为导向的质量管理方法有很多价值,让这些用户这样自食其力是危险的,但对你来说,重要的平衡是开发成本与回报
除非这些IE6用户(不管怎样,他们的浏览器总是会崩溃)会注意到你的应用程序是个问题,并且有能力阻止你销售它,那么开发成本翻番对你有什么价值
最后,如果你真的希望IE6不泄漏,那么不要使用jQuery。从头开始编写所有Javascript,像鹰一样观察你的作用域和各种IE6 DOM错误。jQuery使用扩展属性(在IE6中总是泄漏)并且隐藏了一些如果你想让IE6不泄漏,你确实需要微观管理的范围问题。更新中引用的代码没有任何循环引用需要担心,除非有一个我没有听说过的jQuery问题。任务
从何而来?你如何调用重新创建ticks
?@t.J.-我已经更新了my问题回答您的问题。:)任何在该页面上使用浏览器扩展的flash或其他东西?你真的需要用这种方式刷新页面吗?你能不能不只是在每个计时器滴答声中调整AJAX中的页面DOM?在我看来,用这种方式解决你的问题似乎比查找所有用户都无法修复的内存泄漏更容易。下面是另一个链接at可能更容易阅读:我会使用ASP.Net AJAX,而不是从头开始编写所有javascript。它包括dispose(),允许您删除与DOM的所有连接。谢谢,但我不会。我同时使用了这两个选项,ASP.Net AJAX也有同样的问题。dispose()
可以帮助事件等打开闭包,但IE6在DOM级别泄漏。IE6非常糟糕,除非是专门为IE6编写的,否则任何库都无法缓解。如果您想支持IE6而不泄漏,从头开始编写是最好的方法。
<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>