2012-02-20 24 views
9

我很疑惑爲什麼我的應用程序的內存在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處理所有這些東西。

+1

你在Firefox中運行Firebug嗎?如果是這樣,如果你禁用它會發生什麼? – 2012-02-21 03:00:15

+0

正如我在問題中提到的 - 我嘗試禁用螢火蟲。沒有區別。 – 2012-02-22 09:13:59

+0

這很奇怪。你能鏈接到顯示問題的網站嗎? – 2012-02-22 16:27:21

回答

1

如果您真的使用了很多ajax,您可以嘗試將$ .ajax()選項的「cache」設置爲false。但是,它必須有大量的數據才能對瀏覽器內存產生影響。

由於性能方面的原因,您通常希望在內存中儘可能多地進行操作,並儘可能少地寫入DOM。

它可能只是因爲你正在使用的FF版本不是回收內存以及你正在比較的其他瀏覽器。

在我看來,封閉不是罪魁禍首。這似乎更像是一箇舊的IE問題。

如果確實是一個問題,當你知道它們不再被使用時,你可以嘗試明確地銷燬大型對象。

1

不一定是答案,但是你有最新版本的Firefox(13)的這些問題嗎?這個版本存在很多與內存和性能相關的問題,而且Mozilla說他們正在努力修復它們。另外,如果你有很多頁面加載的項目,並沒有顯示它們,最初你可以使用jquery的waypoints插件來動態加載這些圖像。這可以減輕瀏覽器在頁面加載時的負擔。

希望這有助於。這裏是一些閱讀材料,可以幫助您進一步:

http://support.mozilla.org/en-US/kb/firefox-slow-how-make-it-faster http://support.mozilla.org/en-US/kb/firefox-uses-too-much-memory-ram

http://imakewebthings.com/jquery-waypoints/

2

我看到我的打擊RAM爲2GB

我在碼頭窗口小部件觸發此命令被保存在一個文件:

killall -c firefox 
sleep 1 
open -a Firefox 
sleep 1 
exit 

快速重置FF並重新獲得所有制表符的方法。最需要這樣做的日子:) 如果它不是螢火蟲我現在在Chrome上

相關問題