JS内存与性能优化

一、垃圾回收

JS是使用垃圾回收编程语言,开发者无需操心内存分配和回收。
JS中最常见的垃圾回收策略是标记清理,当值离开作用域是会被标记为可回收,垃圾回收期间被删除。(window中的变量不会被删除)
如:

window.name = 'tom'
var age = 17

以上这两个值都不会被回收,因为是在window的作用域下,而window作用域不会消失。

二、内存管理

1.释放变量

优化内存的最佳手段就是保证在执行代码时值保存必要的数据。如果数据不再必要,那么把它设置为null,从而释放气引用。
如下:

function createPerson (name) {
    var localPerson = new Object();//这里的localPerson无需释放,当函数执行完时变量会被自动释放
    localPerson.name = name;
    return localPerson;
};
var gllbalPerson = createPerson("Nicholas");
// 手工解除globalPerson的引用
globalPerson = null;

(使用const和let声明可以提高性能)
let和const以块(而非函数)为作用域,使用者两个关键字可能会更糟的让垃圾回收程序介入,更早地回收内存。

2.隐藏类和删除操作

两个由同个构造函数创建出来的对象,尽可能的在构造函数中一次性声明所有的属性:

function Atricle(){
      this.title= 'ohhhh'
      this.friend = 'jack'
    }
    let a = new Atricle()
    let b = new Atricle()
    //a.friend = 'jack' //此处的friend应在构造函数中声明 避免创建再补充

若其中的构造实例不需要该属性,则设置为null即可

a.friend = null

3.内存泄漏

1.意外声明全局变量最常见也是最容易修复的内存泄漏问题。
如下:

function setName(){
//这里的name没有使用var、let等关键字声明 就相当于(window.name= 'jack') 而window本身不会消失
name = 'jack' 
}

2.定时器

let name = 'jack'
setInterval(()=>{
console.log(name)
})

3.闭包

let outer = function(){
let name = 'jack'
return function(){
return name
}

4.静态分配

如果矢量对象的生命周期很短,那么要尽可能的不要动态创建矢量对象

function addVector(a,b){
let resultant = new Vector();
resultant.x = a.x + b.x
resultant.y = a.y + b.y
return resultant
}

应优化为:

let resultant = new Vector();
function addVector(a,b,resultant){
resultant.x = a.x + b.x
resultant.y = a.y + b.y
return resultant
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值