Javascript 如何控制IE6+;jQuery+;jQuery ui内存泄漏?

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:我将该按钮事件添加

这是一个有两个约会对象的聚会。以下是滴水结果:

当我反复单击刷新按钮(IE6sp3+、Opera 9、Chrome2和FF3+看起来不错)时,这个页面在IE6sp1中无限期地泄漏。在我真正完全关闭浏览器之前,内存一直在上升,而且永远不会下降

我也尝试过使用最新的jquery(r6414)和最新的稳定UI(1.7.2),但没有任何区别。我尝试过各种各样的事情,但都没有成功

我正在寻找一个解决方案,而不是“使用不同的浏览器!!1”,因为我无法控制它。任何帮助都将不胜感激

更新1:我将该按钮事件添加到循环中,这就是发生的情况(当我终止IE时,会出现突然下降):

更新2:我提交了一份文件(祈求好运)

更新3:这也在网站上

更新4:这(如邮件列表中所述)不起作用,事实上会让事情变得更糟:

$(window).bind("unload", function() {
  $('.hasDatepicker').datepicker('destroy');
  $(window).unbind();
}); 
光叫毁灭是不够的。我仍然被这个问题困住了,很快就要把jquery从项目中剥离出来了。我喜欢它(我真的喜欢!),但如果它坏了,我就不能用了

更新5:开始悬赏,对一个有帮助的人再加550分

更新6:更多的测试表明,IE6和IE6sp1中存在此漏洞,但已在IE6sp2+中修复。现在,关于到目前为止我得到的答案

到目前为止,所有答案都是以下任何一种:

  • 放弃IE6sp0/sp1用户或忽略 他们
  • 调试jquery并自己解决问题
  • 我不能重新解释这个问题
  • 我知道乞丐不能挑肥拣瘦,但这些根本不是我问题的答案

    我不能放弃我的用户。他们占用户群的25%。这是一个为客户编写的定制应用程序,设计用于IE6。放弃IE6sp0/sp1不是一个选项。这不是告诉我的客户去处理它的选项。它泄漏得如此之快,以至于五分钟后,一些较弱的机器无法使用

    此外,虽然我很想成为一名JS忍者,这样我就可以在jquery代码中找到隐晦的内存泄漏(假设这是MS的错,而不是jquery的错),但我也不认为会发生这种情况

    最后,许多人在这里和邮件列表上重现了这个问题。如果无法重新编程,则可能是IE6SP2+,或者刷新不够

    显然,这个问题对我来说非常重要(因此有6个修订版、赏金等等),所以我对新想法持开放态度,但请记住,这三个建议对我都不起作用

    感谢大家的考虑和见解。请让他们继续来

    更新7:悬赏已经结束,SO自动接受了基思的回答。我很抱歉只得到了一半的分数(因为我自己没有选择答案),但我仍然很困惑,所以我认为一半是公平的


    我希望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上拼命工作
    但这并不一定意味着你不能解决这个问题。那就试着侧身传球怎么样

    向每个非IE 6 SP 0用户显示jQuery日期选择器,仅向IE 6 SP 0显示另一个更具弹性(可能是基本)的IE日期选择器。通过这种方式,您可以在软件中保持吸引眼球的功能,并允许IE6用户拥有相同的基本功能

    它可能不是一个干净的选项,但您仍然可以使用您想要的,并且IE6仍然能够在不泄漏的情况下工作


    唯一的问题是,你将有一个更大的负担,必须脱胶两个不同的日期选择器。但无论如何,你都必须调试IE6,因此,这可能是目前你最好的选择。

    IE6的问题在于它有两个垃圾收集器。一个用于JavaScript,一个用于DOM。例如,如果将函数附加到DOM事件,然后删除DOM元素,则该函数仍将存在于内存中

    看看这个。这有点开玩笑,但这是个好消息


    他们在IE7里。我在windows 7的IE8中尝试了你的页面,没有发现内存泄漏。

    在销毁datepicker对象后尝试删除这些对象:

    $.datepicker = null;
    $.fn.datepicker = null;
    
    你能试试这个演示吗。它使用与dojo实现相同的方法从dom中删除元素。一些快速测试似乎缓解了泄漏,虽然没有完全缓解,但效果要好得多

    更新在这方面花了一点时间之后,我很高兴