廢話很少說,繼上次遺留的問題——內存泄漏。
趁週末,查了好多資料,也問了好多JS高手,大體是這麼個狀況。由於我每打開一個窗口,就綁定了一個永久性的dom元素,而dom元素的回收是靠計數器,計數器是會累加的,若是沒有清零,即使刪掉了節點,其實仍是駐留在內存中。
既然大體明白了原理,處理起來就相對比較簡單了,就一句話,首先先看下原先的關閉窗口的代碼php
//關閉 $('.task-window li[window="'+obj.attr('window')+'"]').remove(); obj.fadeOut("500",function(){$(this).remove();});
修改後html
//關閉 $('.task-window li[window="'+obj.attr('window')+'"]').remove(); obj.fadeOut("500",function(){$(this).html("").remove();});
咱們看到,其實我就是先清空了html代碼,而後再刪除了節點。
而後此次我還更新了事件綁定,由於窗口的建立、關閉、移動等事件,其實都是同樣的,因此事件綁定我單獨拎了出來,而非建立dom元素的時候進行綁定,這樣只需註冊一次,並且這樣也能減小內存的佔用吧,這個我沒研究過,但願有人能幫我解答下,事件越可能是不是內存也會佔用越多?
此次就更新了這些,寫的比較少,由於代碼修改沒花太多時間,大部分都在學習和思考上,由於本身自己對js的生命週期、內存釋放/泄漏不太瞭解,因此就花了點時間去了解,寫的不對的地方,還但願你們指出。
測試地址:http://saw.caifutang.com/eone...
源碼:點擊下載
PS:IE下測試內存佔用的小工具sIEve,如何使用能夠看下這個連接,感受還挺好用的。
轉載於猿2048:➸《EonerCMS——作一個仿桌面系統的CMS(十-附最新源碼)》dom