Javascript 如何控制IE6+;jQuery+;jQuery ui内存泄漏?
这是一个有两个约会对象的聚会。以下是滴水结果: 当我反复单击刷新按钮(IE6sp3+、Opera 9、Chrome2和FF3+看起来不错)时,这个页面在IE6sp1中无限期地泄漏。在我真正完全关闭浏览器之前,内存一直在上升,而且永远不会下降 我也尝试过使用最新的jquery(r6414)和最新的稳定UI(1.7.2),但没有任何区别。我尝试过各种各样的事情,但都没有成功 我正在寻找一个解决方案,而不是“使用不同的浏览器!!1”,因为我无法控制它。任何帮助都将不胜感激 更新1:我将该按钮事件添加到循环中,这就是发生的情况(当我终止IE时,会出现突然下降): 更新2:我提交了一份文件(祈求好运) 更新3:这也在网站上 更新4:这(如邮件列表中所述)不起作用,事实上会让事情变得更糟:Javascript 如何控制IE6+;jQuery+;jQuery ui内存泄漏?,javascript,jquery,jquery-ui,memory-leaks,internet-explorer-6,Javascript,Jquery,Jquery Ui,Memory Leaks,Internet Explorer 6,这是一个有两个约会对象的聚会。以下是滴水结果: 当我反复单击刷新按钮(IE6sp3+、Opera 9、Chrome2和FF3+看起来不错)时,这个页面在IE6sp1中无限期地泄漏。在我真正完全关闭浏览器之前,内存一直在上升,而且永远不会下降 我也尝试过使用最新的jquery(r6414)和最新的稳定UI(1.7.2),但没有任何区别。我尝试过各种各样的事情,但都没有成功 我正在寻找一个解决方案,而不是“使用不同的浏览器!!1”,因为我无法控制它。任何帮助都将不胜感激 更新1:我将该按钮事件添加
$(window).bind("unload", function() {
$('.hasDatepicker').datepicker('destroy');
$(window).unbind();
});
光叫毁灭是不够的。我仍然被这个问题困住了,很快就要把jquery从项目中剥离出来了。我喜欢它(我真的喜欢!),但如果它坏了,我就不能用了
更新5:开始悬赏,对一个有帮助的人再加550分
更新6:更多的测试表明,IE6和IE6sp1中存在此漏洞,但已在IE6sp2+中修复。现在,关于到目前为止我得到的答案
到目前为止,所有答案都是以下任何一种:
我希望jquery/jQueryUI团队能够解决这个问题,但我担心我将不得不将其视为“目前不可能”,并停止使用部分或全部jquery。谢谢大家的帮助和关心。如果有人给我的问题提供了一个真正的解决方案,请发帖,我会想办法奖励你。IE6最好的调试器是Visual Studio。(即使是免费版也能用。)正如Janie提到的,如果你的问题只发生在IE6上,你会希望在IE6上调试,特别注意只在IE6上运行的代码。这个问题要么是在jQuery中只有IE6的部分,要么是在缺少IE6特定代码的jQuery的一般部分(如注释中所述)。不管怎样,它仍然是jQuery中需要解决的一个bug。 关于:空白 你要么去,要么去。如果你成功地修复了它,别忘了在bugtracker上附加一个diff,这样项目就会更好一点 如果我有空,我会尽力帮你的 编辑 好吧,所以这个问题似乎无法解决 您面临的泄漏是一个IE6SP0唯一的问题,这是一个由IE的DOM方法引起的泄漏。无论您使用什么JS框架,它都无法正常工作 因此,您当前的选择是:
- 为了让您的用户将IE 6升级到更新的版本/服务包
- 在IE(失去客户)或
- 在IE上拼命工作
唯一的问题是,你将有一个更大的负担,必须脱胶两个不同的日期选择器。但无论如何,你都必须调试IE6,因此,这可能是目前你最好的选择。IE6的问题在于它有两个垃圾收集器。一个用于JavaScript,一个用于DOM。例如,如果将函数附加到DOM事件,然后删除DOM元素,则该函数仍将存在于内存中 看看这个。这有点开玩笑,但这是个好消息
他们在IE7里。我在windows 7的IE8中尝试了你的页面,没有发现内存泄漏。在销毁datepicker对象后尝试删除这些对象:
$.datepicker = null;
$.fn.datepicker = null;
你能试试这个演示吗。它使用与dojo实现相同的方法从dom中删除元素。一些快速测试似乎缓解了泄漏,虽然没有完全缓解,但效果要好得多
更新在这方面花了一点时间之后,我很高兴