1 原文資訊
1.1 標題
JavaScript Memory Leaks
1.2 網址
[http://nesj.net/blog/2012/04/javascript-memory-leaks/]
2 JavaScript 記憶體泄露
2.1 什麼是記憶體泄露
記憶體泄露的定義是:系統為應用程式分配了記憶體,但在這部分記憶體不會再使用的情況下時,也不能被重新分配。通常情況下,在 DOM 元素以及事件控制代碼不再被引用或者不可到達時,垃圾收集器會負責收集它們。然而,記憶體泄露是對於早期的IE瀏覽器版本(IE7或者更早的)不可避免的,因為這時記憶體管理器對 javascript 記憶體的生存周期處理得並不是很好,並且直到記憶體迴圈被通過賦值為 null 的方式強制打破後,才會重新聲明這片記憶體。
2.2 為什麼記憶體泄露需要引起你的注意?
記憶體泄露通常是因為大型的 web 應用程式中的內部編程錯誤引起的。當被浪費記憶體增長得超出系統能夠提供的最大記憶體限度時,web 應用程式的效能將會被大大降低。作為一名 web 程式開發人員,能夠開發一個 web 應用程式來滿足功能需求,這僅僅只是第一步而已,效能要求與完成 web 應用程式基底本功能同等重要,不然的話,會增加導致潛在的失敗可能性及導致瀏覽器的崩潰。
2.3 在 javascript 中,什麼是主要導致記憶體泄露的主要原因呢?
2.3.1 循環參考
一個簡單的例子是一個通過 javascript 對象引用的 DOM 對象,並且在同時正在應用同樣一個或者另外一個 javascript 對象,這個 DOM 對象可能會導致記憶體泄露。儘管指令碼已經停止運行,這個DOM元素的引用不將會被記憶體回收行程回收。這種模式通常發生在一系列的對象引用並且非常難於檢測當前對象是否還存在引用。為了打斷循環參考,要麼將 javascript 對象指向 DOM 對象,要麼將 DOM 對象賦值為 null。
2.3.2 javascript 閉包
因為 javascript 範圍的局限性,很多特性都是依賴 javascript 閉包方式實現的。如果你想瞭解