1. 什么是内存泄漏
内存泄漏是指在Javascript中,已经分配内存地址的对象由于长时间未释放或者是无法释放造成了长期占用内存,使内存浪费,最终导致运行的应用响应速度变慢以及最终崩溃的情况。
2. 内存泄漏场景
- 过多的缓存未释放
- 闭包太多未释放
- 定时器或者回调太多未释放
- 太多无效的DOM未释放
- 全局变量太多未被发现
3. 优化
- 减少不必要的全局变量,使用严格模式避免意外创建全局变量
function foo(){
// 全局变量window.bar
this.bar = '默认this指向全局变量'
// 没有声明的变量实际上就是全局变量window.bar
bar = '全局变量'
}
foo()
- 在使用完数据后,及时解除引用
var someResource = getData();
setInterval(function(){
var node = document.getElementById('Node')
if(node){
node.innerHTML = JSON.stringify(someResource())
// 定时器未清除
}
// node,someResource存储了大量数据,无法回收
},1000)
- 组织好代码逻辑,避免死循环造成卡顿
var leakArray = []
exports.clear = function(){
leakArray = []
}