1. 内存管理方案,内存泄露的造成
1.1 全局变量导致内存泄漏问题
使用全局变量可能会导致内存泄漏
,因为它们在程序终止之前不会自动被垃圾回收
let globalArray = [ ] ;
function addToGlobalArray ( item ) {
globalArray. push ( item) ;
}
function manageArray ( ) {
let localArray = [ ] ;
function addToArray ( item ) {
localArray. push ( item) ;
}
}
1.2 闭包引发的内存泄漏
即使外部函数已经返回,闭包仍可以保留对变量的引用,如果使用不当,可能会导致内存泄漏
function outerFunction ( ) {
let largeArray = new Array ( 1000000 ) . fill ( 'data' ) ;
return function innerFunction ( ) {
console. log ( largeArray. length) ;
}
}
const inner = outerFunction ( ) ;
inner ( ) ;
function outerFunction ( ) {
let largeArray = new Array ( 1000000 ) . fill ( 'data' ) ;
return function innerFunction ( ) {
console. log ( largeArray. length) ;
largeArray = null ;
}
}
const inner = outerFunction ( ) ;
inner ( ) ;
1.3 事件监听导致内存泄漏问题
当不再需要事件监听器时未能删除它们可能会导致内存泄漏
function addEventListenerExample ( ) {
document. querySelector ( 'button' ) . addEventListener ( 'click' , function ( ) {
console. log ( 'Button clicked' ) ;
} ) ;
}
function addEventListenerExample ( ) {
const button = document. querySelector ( 'button' ) ;
const clickHandler = function ( ) {
console. log ( 'Button clicked' ) ;
}
button. addEventListener ( 'click' , clickHandler) ;
button. removeEventListener ( 'click' , clickHandler) ;
}
1.4 DOM 节点导致的内存泄漏
引用的已经删除的 DOM 节点可能会导致内存泄漏。当删除节点时,需要清理 DOM 引用
let element = document. createElement ( 'div' ) ;
document. body. appendChild ( element) ;
document. body. removeChild ( element) ;
element = nul
2. 优化数据结构
选择正确的数据结构会显著影响 JavaScript 应用程序的性能。高效的数据结构可以提高搜索、排序和操作数据等操作的速度和内存使用率
const uniqueValues = new Set ( [ 1 , 2 , 3 , 4 , 5 , 5 , 6 ] ) ;
uniqueValues. add ( 7 ) ;
uniqueValues. delete ( 3 ) ;
console. log ( uniqueValues. has ( 2 ) ) ;
console. log ( uniqueValues. size) ;
const map = new Map ( ) ;
map. set ( 'key1' , 'value1' ) ;
map. set ( 'key2' , 'value2' ) ;
console. log ( map. get ( 'key1' ) ) ;
map. delete ( 'key2' ) ;
console. log ( map. size) ;