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泄漏,这样新请求只会覆盖以前的缓存条目,并且内存使用在第一个请求之后不会增加。