2012-04-17 35 views
0

可能重複:
jQuery Memory Leak Suspicion

我發現我們的網站得到了慢長的標籤呆開放。使用Chrome的任務管理器,我縮小了問題:

每次下面的代碼行稱爲內存使用率增加:

$jquery.post(url, params); 

我實現了一個1秒計時器這個代碼,並在幾分鐘之內內存使用量從30MB變爲250MB。註釋掉這一行代碼就可以解決問題。請注意,我只評論這一行;我仍然會生成URL和參數。所以這個問題肯定與這行代碼有關。每次運行大約2MB內存消耗。

顯然有某種memleak。我期望它與緩存或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); 
    }, 

謝謝!

回答

1

使用分析工具來查找未被垃圾收集的大對象。例如。在Chrome F12 /分析/堆跟蹤中。

+0

好吧,我用的Chrome配置文件選項卡採取堆快照。根據快照,儘管任務管理器中的內存使用量大於100 MB,但堆大小僅爲〜5MB。我要去嘗試挖掘一些文檔來理解兩者之間的關係,因爲我目前不明白內存如何被頁面佔用,但不在堆中...... – 2012-04-17 17:49:01

+0

也許你的連接沒有正常終止?您可能可以在網絡選項卡中檢查該內容,或者在幾次請求後關閉Web服務器,並查看內存是否已釋放。 – Tgr 2012-04-17 17:55:57

+0

另外,如果URL每次都不相同(請注意,即使您的URL參數相同,jQuery也可以將緩存中斷參數附加到URL),但可能會有某種瀏覽器端緩存正在進行(儘管對POST請求來說是不尋常的)。 – Tgr 2012-04-17 17:57:42