2011-11-09 54 views
2

因此,我正在製作一個完全基於AJAX構建的複雜項目管理系統。通過散列導航,網站加載並刪除大量HTML,並在每個加載中添加大量事件偵聽器。JS內存泄漏與AJAX應用程序和事件偵聽器?

我的問題是,現代瀏覽器垃圾收集事件偵聽器後,這些元素已$ .remove'd。

如果沒有,使用onclick =「doFunction();」會更好嗎?而不是爲了防止添加事件偵聽器?我寧願不這樣做,但如果它能防止內存泄漏,它可能是最好的選擇。

任何幫助將不勝感激。

謝謝!

回答

2

不,最好使用jQuery添加事件偵聽器,因爲jQuery處理可能的內存泄漏

+0

我很樂意相信這是真的,但我不相信它是真的。由於編寫得不好的事件處理程序綁定代碼,即使使用jQuery,您仍然可以繼續留下公噸指針。 –

+1

我認爲Tadeck所說的是,如果您使用jQuery綁定事件處理程序並從DOM中刪除元素,那麼jQuery將清除事件處理程序,這些事件處理程序可能會在刪除元素時在舊版瀏覽器中導致泄漏。 – jfriend00

+0

jQuery不會清理所有情況下的所有引用;但它當然有幫助,但! –

2

使用onclick是不是要走的路。 jQuery是一個很好的選擇,特別是如果它在整個應用程序中證明有用。如果您僅將它用於Ajax,則可以找到較小的庫來完成這項工作。

如果你想使用jQuery,我強烈建議使用.on()而不是在每個負載上添加事件監聽器。如果你爲代表使用.on()(替換已棄用但仍然有效的.delegate()方法),你不需要用每次加載重新綁定它們,這實際上可以消除由於綁定/解綁意大利麪而導致泄漏的可能性。