web前端的內存泄漏

什麼是內存泄漏

JavaScript中的內存泄漏就是被分配的內存沒有被使用,但是也不能被回收的一種現象。簡單來說,我們已經無法再通過js代碼來引用到某個對象,但垃圾回收器卻認爲這個對象還在被引用,因此在回收的時候不會釋放它,這樣導致內存一直被佔用,會導致內存不夠用而系統崩潰。

內存泄漏常見的的幾種情況

全局變量

全局變量是不可回收的銷燬的,所以謹慎使用,如果存入數據過大,可以再用完之後進行清空,設置爲null或重新定義。

閉包

根據閉包的特性,內部函數有權訪問外部函數的變量對象。所以當fn()執行之後,DOM元素已經存在於內存。

function fn(){  
    var dom = document.createElement("XXX"); 
    dom .onclick = function(){ 
        console.log("DOM被閉包引用,不進行回收處理")
    }
}
fn()

沒有清理的 DOM 元素引用

function processData(data) {
  if (!data) {
    return
  }
  const url = window.URL.createObjectURL(new Blob([data]))
  const link = document.createElement('a')
  link.style.display = 'none'
  link.href = url
  link.setAttribute('download', fileName)
  document.body.appendChild(link)
  link.click()
   // document.body.removeChild(link) 記得要手動清除
}
processData(data)

被遺忘的計時器或回調

var times = new Date(); 
setInterval(function() { 
    var dom = document.getElementById('XXXX'); 
    if(dom) { 
        // 處理 dom 和 times 
        node.innerHTML = JSON.stringify(times)); 
    } 
}, 1000);

內存泄漏查找方式

  • 調試工具——Memory——Profiles——Take snapshot
    在這裏插入圖片描述
  • summary對照表
    在這裏插入圖片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章