Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery$.post()(AJAX)导致内存泄漏_Javascript_Jquery - Fatal编程技术网

Javascript jQuery$.post()(AJAX)导致内存泄漏

Javascript jQuery$.post()(AJAX)导致内存泄漏,javascript,jquery,Javascript,Jquery,可能重复: 我注意到我们的网站越开越慢。使用Chrome的任务管理器,我缩小了问题的范围: 每次调用以下代码行时,内存使用量都会增加: $jquery.post(url, params); 我在1秒计时器上实现了这段代码,几分钟内内存使用量就从30MB增加到250MB。只注释这一行代码就可以解决问题。注意,我只注释了这一行;我仍然允许生成URL和参数。所以问题肯定与这行代码有关。每次运行大约2MB时,会消耗更多的内存 显然存在某种形式的内存泄漏。我认为这与结果的缓存或JSON反序列化有关(J

可能重复:

我注意到我们的网站越开越慢。使用Chrome的任务管理器,我缩小了问题的范围:

每次调用以下代码行时,内存使用量都会增加:

$jquery.post(url, params);
我在1秒计时器上实现了这段代码,几分钟内内存使用量就从30MB增加到250MB。只注释这一行代码就可以解决问题。注意,我只注释了这一行;我仍然允许生成URL和参数。所以问题肯定与这行代码有关。每次运行大约2MB时,会消耗更多的内存

显然存在某种形式的内存泄漏。我认为这与结果的缓存或JSON反序列化有关(JSON结果可能相当大)

有人能提供一个解决方案吗?即使仅仅强制进行一些垃圾收集也是可以接受的。FWIW,内存使用偶尔会减少,但不会减少很多(垃圾收集?)。我刚刚看到它从300MB下降到250MB,但现在又在缓慢上升

更具体地说,代码如下所示

...

    init: function()
    {
        setInterval(function(){ SManager.updateAll(); }, 1000);
    },

    updateAll: function() 
    {
        var url = SManager.SERVER_URL;
        var params = new Object();
        params.version = 1;
        params.platform = 'web';

        $jquery.post(url, params);
    },

谢谢

使用分析工具查找未被垃圾收集的大型对象。例如,在Chrome F12/Profiling/Heap trace中。

与stackoverflow解决方案类似的问题 我相信您的
问题的解决方案可以在这里找到:


好的,我使用Chrome的Profiles选项卡拍摄了一个堆快照。根据快照,堆大小只有~=5MB,即使任务管理器中的内存使用量大于100MB。我将尝试去挖掘一些文档来理解两者之间的关系,因为我目前不明白内存是如何被页面消耗的,而不是堆中的…也许你的连接没有正确终止?您可以在“网络”选项卡中进行检查,或者在几次请求后关闭web服务器,查看内存是否已释放。此外,如果每次URL都不相同(请注意,即使URL参数相同,jQuery也可以向URL附加一个缓存中断参数),则可能会出现某种浏览器端缓存(虽然这对于POST请求来说并不常见。)“网络”选项卡在每个请求上显示200/OK,平均响应时间约为500毫秒。浏览器端缓存听起来很有可能。我刚刚尝试将$.POST()转换为$.ajax()调用并设置cache:false,但问题仍然存在…cache:false意味着jQuery将向每个请求附加某些内容,以确保它们都使用不同的URL。这意味着结果永远不会来自浏览器缓存,但不会阻止浏览器缓存请求。如果确实是缓存,则应改为设置cache:true泄漏,这样新请求只会覆盖以前的缓存条目,并且内存使用在第一个请求之后不会增加。