我很疑惑爲什麼我的應用程序的內存在Firefox中的速度比其他瀏覽器快得多。重型AJAX應用程序中的Firefox特定內存增加
基本上,應用程序使用了相當數量的AJAX,基本操作是加載具有平均HTML級別的帖子的新集合,並且通常具有大圖像。每個帖子的平均數據量(包括加載的圖片)小於1MB,大概爲900k。使用jQuery 1.7.1。
在Chrome內存似乎是穩定的,但在Firefox中,每個後期加載導致大約20MB的新內存使用。由於大量帖子被加載,你很快就會在內存中超過1GB甚至1.4GB,並且事情很快就會停止。
在Firefox上挖掘,我試圖用'刪除'來消除閉包和任何無關變量。沒有太大的改善。然後我開始刪除功能,並且似乎所有事情都做出了貢獻。
刪除工具提示,一些過多的FB小部件重新加載(每個帖子一個評論小部件),我做了很大的改進,每篇文章降低到10MB的新內存。
但除此之外,我不能低得多!基本上,如果我只是通過$ .post()加載新的html +圖像(再次約900k),每個帖子都會添加〜8mb的新內存,即使新圖像具有「display:none」。 (也嘗試禁用螢火蟲)。
這是我第一次嘗試進行內存管理,但這看起來像是一個很大的開銷,並且很奇怪,因爲我不認爲內存真的會像Chrome那樣增加。似乎我應該讓內存的增加更符合加載的數據量,而不是10倍! (或者根本就沒有像Chrome那樣好......)
這真的很合理嗎?任何關於在哪裏尋找問題的想法,或者我可以做些什麼來進一步減少這個問題?
謝謝!
更新:
作爲鮑里斯恰當地觀察到的,存儲器的增加幾乎完全是由於圖像(至少80%)。但是,內存的增加再次是所加載圖像的大小(10倍)。我學習的另外一件事是:內存 - 如果我只是打開一個新的空標籤,內存會迅速下降,幾乎所有添加的圖像相關的內存都會消失。我猜這就是GC踢的,因此就像鮑里斯猜測的那樣,這似乎是GC問題?
如果是這樣的話,我該如何調查爲什麼它不是自然地只在FF中被觸發?有沒有方法在JS中觸發它?正如我提到的,我試圖通過並刪除關閉...
另一個想法,可以綁定事件(通過jQuery)的圖像元素而不是divs是壞的?我認爲jQuery處理所有這些東西。
你在Firefox中運行Firebug嗎?如果是這樣,如果你禁用它會發生什麼? – 2012-02-21 03:00:15
正如我在問題中提到的 - 我嘗試禁用螢火蟲。沒有區別。 – 2012-02-22 09:13:59
這很奇怪。你能鏈接到顯示問題的網站嗎? – 2012-02-22 16:27:21