首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FF4中的简单jQuery AJAX泄漏(Windows7)

FF4中的简单jQuery AJAX泄漏(Windows7)
EN

Stack Overflow用户
提问于 2011-04-07 16:54:51
回答 3查看 389关注 0票数 1

我的web应用程序一直在泄漏内存,所以我创建了一个测试网页,看看是否可以找出真正泄漏的是什么。所以我已经得到了这段简单的代码,它可以很快地增加到大约300mb的内存使用量。

在Chrome中,同样的代码似乎不会泄漏,因为一旦GC运行,内存使用率就会显着下降。在FF4 (Windows7)中,内存使用量似乎永远不会下降,即使代码已经运行完毕。

是什么导致了这里的内存泄漏,或者是FF4问题(我有noticed a few)?

注:我使用的是jQuery 1.5,在安全模式下运行时禁用了所有插件。

代码语言:javascript
复制
    $.ajaxSetup ({
        cache: false
    });

    var counter = 0;
    ajaxTest();

    function ajaxTest()
    {
        $.ajax({
            type: "GET",
            url: "/web/data/data.xml",
            dataType: "xml",
            success: function(xml) {
                $("#counter").text(++counter);
                xml = null;

                if (counter < 2000)
                    setTimeout(ajaxTest,25);
            }});
    }
EN

回答 3

Stack Overflow用户

发布于 2011-05-06 14:51:20

此反模式:

代码语言:javascript
复制
 function bar()
    {
       function foo() { setTimeout(bar,25); }
       setTimeout(foo,1);
    }

被称为“俄罗斯轮盘赌”。在每次迭代中,创建新的递归闭包。从技术上讲,这不是泄漏,而是内存中手工生成的递归结构。

票数 1
EN

Stack Overflow用户

发布于 2011-04-07 17:00:22

在回调函数的末尾,您可以只调用ajaxTest而不使用setTimeout。你到底为什么需要setTimeout?

票数 0
EN

Stack Overflow用户

发布于 2011-05-06 14:37:24

这可能是因为cache设置为false。它并不会真正阻止您的浏览器缓存响应;它只是唯一地发送每个请求,因此不会尝试使用缓存的响应。也许Chrome能更好地处理无用的缓存文件。我不太了解浏览器缓存是如何工作的,但是两千份相同的xml文件可能会占用大量内存。

也许你可以在启用缓存的情况下尝试一下,看看结果是否不同。

编辑:实际上,这可能是错误的。你应该看看http://blog.linkibol.com/2010/05/07/did-you-know-that-jquery-leaks-memory-like-a-fountain/

我不太确定为什么Chrome会被排除在这个问题之外…

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5578448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档