js语言性能优化以及相关概念理解

2021-01-06  本文已影响0人  池鱼_故渊

概要

内存管理

我们来看 js 语言是怎么做到这个流程

// 因为js没有提供申请内存的管理的api 所以当我们主动定义变量的时候js会主动给我们分配内存空间
// 申请
let obj = {};
//使用
obj.name = "wj";
// 同样js也没有提供api给我释放内存空间,下面只是模拟了释放内存空间
//释放
obj = null;

js 垃圾回收

可达对象

GC 算法介绍

引用计数算法原理介绍

核心思想:设置引用数,判断当前引用数是否为 0

const user = { anme: "q" };
function fn() {
  const name = "11";
}
fn();
//当fn执行完毕后,全局变量是无法找到fn函数内的name属性,此时name的引用数会变成0 回收掉,而user则不会被回收

优点:

缺点:

function foo(){
    const user1 = {}
    const user2 = {}
    user1.name = user2
    user2.name  user1
}
foo()
// 当函数执行完后,由于user1和user2循环引用,此时计数是不为0的,所以计数不能回收垃圾,因为函数已经执行完,user1和user2没有存在的必要了,所以造成了内存浪费

标记清除算法实现原理

优点:

标记整理算法

和标记清除算法很相似,只不过清除之前会整理标记的内容,然后再清除垃圾内容,可以使空间利用最大化

V8 引擎

代码优化

// 第一种
for (var i = 0; i < 10; i++) {
  var op = document.createElement("p");
  op.innerHTML = i;
  document.body.appendChild(op);
}
// 第二种 文档碎片添加
const frag = document.createDocumentFragment();
for (var i = 0; i < 10; i++) {
  var op = document.createElement("p");
  op.innerHTML = i;
  frag.appendChild(op);
}
document.body.appendChild(frag);

// 第二种性能更好一点
上一篇 下一篇

猜你喜欢

热点阅读