我是新來的JavaScript,似乎有點問題追蹤內存泄漏。由於代碼相當複雜,我將它縮小到似乎導致內存泄漏的部分。我會發佈一個不重要的例子,但它會導致同樣的問題(只是小得多)。當前瀏覽器中的閉包和(jQuery)DOM事件發生內存泄漏?
基本上,我有一些代碼,動態創建HTML和將事件附加到HTML。 HTML會在每次AJAX請求時重建。這一切都工作正常,第一次,但每個AJAX請求後,瀏覽器內存上升(不總是相等)!通過點擊jsfiddle上的多次運行並觀看瀏覽器內存,可以重現此問題。我的假設是,創建的閉包不會被垃圾收集,但我不確定?如果是這樣的話,是否有更好的方法來做到這一點,沒有關閉不會導致任何問題?
這發生在FF8,Chrome的最新版本和IE 8中。最有可能的是所有其他 - 正是我測試過的。
我已經在應該幫助的代碼中加入了一些註釋。
謝謝!好吧,在使用sIEve做了一些更多的研究之後,我可以看到DOM節點的數量在每個AJAX調用中翻倍。我已經更新了這個例子來模擬這個。所以我的問題是,爲什麼調用jQuery的空元素或刪除函數後不收集DOM元素?我也通過解除綁定的事件處理程序,並設置每個DOM元素JS參考,而不會影響到空的東西的元素環......
有IE6和一些HTML/DOM-JS內存問題(問題是DOM有一個內存模型和JS引擎有另一個,試圖解決這兩個問題),雖然我認爲這已經基本解決了......不知道現代瀏覽器中是否有任何當前的「陷阱」。 – 2011-12-06 22:53:15
我無法在最新的Chrome上重現此操作:/ –
可能想說出Chrome的「最新版本」,因爲它不總是相同的。另外,指定使用的jQuery版本。 :) [舊版本的jQuery有事件發生內存泄漏。](http://bugs.jquery.com/ticket/5285) – 2011-12-06 22:57:45