IE中的記憶體洩露
JavaScript在IE中的記憶體洩露一共有四種情況:
首先要清楚JavaScript中的垃圾回收機制 當一個物件沒有被變數所引用時就會自動回收。
1. 迴圈引用 當兩個物件發生迴圈引用 並且其中一個是DOM物件是就會發生記憶體洩露。
例項程式碼:
一個建構函式需要傳入一個DOM節點
function leak(dom){
this.domLink = dom;
dom.property = this;
}
這樣每次建立一個物件是都會都會發生記憶體洩露。
解決方法:
顯示獲得DOM節點釋放對JavaScript物件的引用。
2. 閉包的使用
function leak(){
var node = document.getElementById("test");
function inner(){
//在這裡使用了node節點
}
node.onclick = inner;
}
解決方法:
這裡如果要釋放掉洩露的記憶體就必須登出繫結的函式,因為inner又是內部元素所以沒有辦法得到。要想 登出掉就必須得有一個引用。可以這樣
node.property = inner;
這樣我們就可以remove這個事件監聽器了。
3. 交叉頁面記憶體洩露
一般發生在動態建立頁面元素並將其插入DOM樹種發生。這種記憶體洩露主要是因為DOM元素插入的順序不對引起 的。 並且即使頁面導向其他頁面或者關閉記憶體也不會被釋放。引起這種洩露的原因是 在DOM節點之間會有一個節 點關係管理的物件 如果一次建立好插入進去就會有關係管理物件 而在插入DOM樹種會繼承DOM樹中的這個物件 以前的就會被釋放掉 就會造成記憶體洩露。 這是IE6一個很嚴重的BUG。
例項程式碼:
var parentNode = document.createElment("div");
var node = document.createElement("div");
//這樣就會引起記憶體洩露
parentNode.appendChild(node);
document.documentElement.appendChild(parentNode);
document.documentElement.removeNode(parentNode);
parentNode.removeNode(node);
//這樣就不會引起記憶體洩露
document.documentElement.appendChild(parentNode);
parentNode.appendChild(node);
4. 貌似洩露
這個是動態修改指令碼檔案裡面的文字內容是會發生記憶體洩露,不過這種洩露會在頁面清空或者轉向時釋放掉內 存。
可以參考下面連結: http://www.cnblogs.com/birdshome/archive/2006/05/28/ie_memoryleak.html
相關文章
- SHBrowseForFolder 記憶體洩露記憶體洩露
- 記憶體溢位和記憶體洩露記憶體溢位記憶體洩露
- Lowmemorykiller記憶體洩露分析記憶體洩露
- java中如何檢視記憶體洩露Java記憶體洩露
- ArkTS 的記憶體快照與記憶體洩露除錯記憶體洩露除錯
- 使用 mtrace 分析 “記憶體洩露”記憶體洩露
- 實戰Go記憶體洩露Go記憶體洩露
- Android 記憶體洩露詳解Android記憶體洩露
- android Handler導致的記憶體洩露Android記憶體洩露
- Linux記憶體洩露案例分析和記憶體管理分享Linux記憶體洩露
- nodejs爬蟲記憶體洩露排查NodeJS爬蟲記憶體洩露
- Pprof定位Go程式記憶體洩露Go記憶體洩露
- 簡單的記憶體“洩露”和“溢位”記憶體
- JAVA記憶體洩露的原因及解決Java記憶體洩露
- Python實現記憶體洩露排查的示例Python記憶體洩露
- win10驅動記憶體洩露如何解決_win10記憶體洩露處理方法Win10記憶體洩露
- netty 堆外記憶體洩露排查盛宴Netty記憶體洩露
- 乾貨分享:淺談記憶體洩露記憶體洩露
- 解決git記憶體洩露問題Git記憶體洩露
- Spring Boot heapdump洩露記憶體分析方法Spring Boot記憶體
- 線上記憶體洩露定位--memleak工具記憶體洩露
- 記一次"記憶體洩露"排查過程記憶體洩露
- 一個 Vue 頁面的記憶體洩露分析Vue記憶體洩露
- 一個Vue頁面的記憶體洩露分析Vue記憶體洩露
- C程式記憶體洩露檢測工具——ValgrindC程式記憶體洩露
- Android效能最佳化之記憶體洩露Android記憶體洩露
- 小題大做 | Handler記憶體洩露全面分析記憶體洩露
- 案例:隱秘而低調的記憶體洩露(OOM)記憶體洩露OOM
- 經驗之談:記憶體洩露的原因以及分析記憶體洩露
- laravel octane 在請求中Artisan call會記憶體洩露, 求解Laravel記憶體洩露
- 記一次 .NET 某工控軟體 記憶體洩露分析記憶體洩露
- ThreadLocal原始碼解讀和記憶體洩露分析thread原始碼記憶體洩露
- 使用mtrace追蹤JVM堆外記憶體洩露JVM記憶體洩露
- 一次Kafka記憶體洩露排查經過Kafka記憶體洩露
- 前端面試題51----JS記憶體洩露前端面試題JS記憶體洩露
- 利用dotnet-dump分析docker容器記憶體洩露Docker記憶體洩露
- Android中使用Handler造成記憶體洩露的分析和解決Android記憶體洩露
- php常駐程式記憶體洩露的簡單解決PHP記憶體洩露
- [翻譯]查詢Windows記憶體洩露的幾種方法Windows記憶體洩露