自学内容网 自学内容网

JS 性能优化

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 引用
// DON 节点的引用
let element = document.createElement('div');
document.body.appendChild(element);
document.body.removeChild(element); // DOM 节点被删除

// 手动清理引用
element = nul

2. 优化数据结构

选择正确的数据结构会显著影响 JavaScript 应用程序的性能。高效的数据结构可以提高搜索、排序和操作数据等操作的速度和内存使用率
// 基于 Set 构建唯一值的集合
const uniqueValues = new Set([1, 2, 3, 4, 5, 5, 6]);
uniqueValues.add(7);
uniqueValues.delete(3);
console.log(uniqueValues.has(2)); // true
console.log(uniqueValues.size); // 6

// 基于 Map 构建 key-value 结构
const map = new Map();
map.set('key1', 'value1');
map.set('key2', 'value2');
console.log(map.get('key1')); // 'value1'
map.delete('key2');
console.log(map.size); // 1

原文地址:https://blog.csdn.net/everyStudy/article/details/142328105

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!