JQuery還是不能盲目使用的,關於DOM的釋放

2022-03-25 15:28:13 字數 818 閱讀 9818

專案進入尾聲,又是最恐怖的效能測試 (對著js的效能測試我只能做這個表情 -_-!   )

經過多次的**檢查和測試,確認已經把自己定的變數什麼的一大堆都已經用null處理,並且沒有明顯的迴圈引用,但結果進行使用者某一動作時,記憶體還是沒被全部**,而是線性增加,最後發現,問題都是出現在dom身上

主要是太相信jquery的empty()和 remove(),以為他們會把dom都清理了,結果浪費了我兩天的時間 orz ..

但結果是empty()是呼叫remove()來進行清空的,而remove()則是先清理所有選中的物件及其子物件的所有事件和屬性,再使用removechild()刪除自己,而問題就是出現在這裡

經在ie6下測試,removechild()有兩個很重要特性:

第一,他不會刪除dom中的事件

第二,他不會真正刪除(釋放)指定物件中的子物件

而jquery就是犯了第二條, 結果所有子物件都成為了不在dom樹中的「遊離子dom樹」,這時js是無能為力了(因為已經沒有引用位址,例如變數名),即使使用collectgarbage();都不能釋放記憶體

解決方案(偽**):

jquery( 「*」, obj).add([obj]).each(function());

obj.innerhtml = 「」;

ps.:

上面**意思是:使用jquery把指定物件及所有子物件的事件和屬性去除,這是由於使用innerhtml和removechild()一樣也不能清除物件的事件,然後使用innerhtml=」」 來清空內容,使用innerhtml=」能把所有子物件都完全清空,問題解決

最後多謝我的兩位同事志哥和浩哥提供的技術支援

混合雲使用不能盲目 學習最佳實踐是王道

多年來,企業一直享受著混合雲帶來的益處。然而,他們同時也忍受著不斷增長的痛苦,混合雲的新人可以從他們的前輩所犯的錯誤中學習。混合雲的採用率正在上公升。很多組織看到了雲服務的優勢,但他們也想要自己擁有一定的靈活性,將一些工作負載和資料保持在本地的控制下。雖說有些意外,但對於it來說,混合雲的 真正的 ...

混合雲使用不能盲目 學習最佳實踐是王道

多年來,企業一直享受著混合雲帶來的益處。然而,他們同時也忍受著不斷增長的痛苦,混合雲的新人可以從他們的前輩所犯的錯誤中學習。混合雲的採用率正在上公升。很多組織看到了雲服務的優勢,但他們也想要自己擁有一定的靈活性,將一些工作負載和資料保持在本地的控制下。雖說有些意外,但對於it來說,混合雲的 真正的 ...

告訴你高效學習的秘密,學習不能盲目,時間更不等人

學習不能盲目,時間更不等人,掌握學習技巧是你未來發展所必須的。過五年十年,你還能和年輕人拼搏的資本就在這些學習方法。現在 it 技術日益更新,好多同學們都在追潮流,一聽說新技術出來了,最近很火,然後就盲目跟風去學了,這不僅僅浪費時間和精力又磨滅了你意志力,最後感覺自己不是那塊料。這裡我會告訴你在學習...