專案進入尾聲,又是最恐怖的效能測試 (對著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 技術日益更新,好多同學們都在追潮流,一聽說新技術出來了,最近很火,然後就盲目跟風去學了,這不僅僅浪費時間和精力又磨滅了你意志力,最後感覺自己不是那塊料。這裡我會告訴你在學習...