内存优化整理

发布于:2024-03-28 ⋅ 阅读:(18) ⋅ 点赞:(0)

垃圾回收策略

  • 采用分代回收思想,将内存分为新生代和老生代,对不同对象采用不同的GC算法
    • 新生代采用复制算法和标记整理,在内部将空间一分为二,称为使用空间和空闲空间,在程序清理时将使用空间数据拷贝到空闲时间,然后两个空间交换完成资源释放
    • 老生代采用标记清楚和标记整理和增量标记算法 ,
  • V8内存分配
    • 将内存分一分为二,小空间存储新生代对象(32M|16M )
    • 新生代指存活时间较短对象
    • 老生代指的存活时间较长的对象(1.4G|700M)

提高代码运行效率

  • 近层查找
for (let a = 0; a < 10; a++) {
    console.log(a)
}
// 上面语句比下面快
var a
for (let index = 0; index < 10; index++) {
    a = index
    console.log(a)
}
  • 减少语句
function a(obj) {
    return obj.a === 1
}
// 上面语句比下面快
function a(obj) {
	const num =  obj.a
    return num=== 1
}
  • 使用缓存
function a(obj) {
	const num =  obj.a
	console.log(num)
    return obj.a === 1
}
// 上面语句比下面快
function a(obj) { 
	console.log(obj.a)
    return obj.a === 1
}
  • 减少访问层级
function Person() {
    this.name = 'jack'
}
const p = new Person()
console.log(p.name)
// 上面语句比下面快
function Person() {
    this.name = 'jack'
    this.getName = function(){
    	return this.name
    }
}
const p = new Person()
console.log(p.getName() )
  • 减少层级判断
  function fun(a,b) {
    const arr =[1,2];
    if(!arr.includes(a)){
    	return
    }
    if(b>3){}
}
// 上面语句比下面快
function fun(a,b) {
    const arr =[1,2];
    if(arr.includes(a)){
    	if(b>3){
    	}
    }else{
    }
}
  • 减少循环体活动
 function fun(a,b) {
    const arr =[1,2];
    var i;
    var len = arr.leength;
    for(i=0;i<len;i++){}
}
// 上面语句比下面快
  function fun(a,b) {
    const arr =[1,2];
    for(var i=0;i<rr.leength;i++){}
}
  • 字面量和构造式
function fun() {
   const obj = {
   	name: 'jack'
   }
}
// 上面语句比下面快
function fun() {
   const obj = new Objeact()
   obj.name = 'jack'
}
本文含有隐藏内容,请 开通VIP 后查看