- 尽量的用const和let,少用var;
- 因为在通常情况下var a = 1,等于window.a = 1;
var a = 1;
console.log(a === window.a);//true
2.在用const和let的过程中,在确保定义的常量不会变的情况下能用const尽量用const,能有效避免值的重复声明。
3.减少闭包的使用,闭包会让垃圾回收机制跳过清理该变量。(定时器也会造成一只占用内存的情况)
//定时器
let name = 'jack';
settimeout( () => {
console.log(name)
},200);
//闭包
function test(){
let name = 'rock';
return function(){
return name;
}
}
4.隐藏类 在v8引擎中,会存在这种情况:创建了两个对象,这两个变量是由同一个构造函数生成的。
function cunstor(){
this.name = 'wow';
}
let aaa = new cunstor();
let bbb = new cunstor();
在这种情况下,aaa和bbb两个对象共享同一个隐藏类。 但是如果其中一个对象增加了一个属性,如:
bbb.age = 33;
在这种情况下,两个cunstor实例就会对应两个不同的隐藏类,根据操作频率和隐藏类的大小,可能会造成性能影响。
另外,delete也会造成隐藏类的增加。 如:
function cunstor(){
this.name = 'wow';
this.age = 100;
}
let aaa = new cunstor();
let bbb = new cunstor();
//这个时候是共享的-同一个隐藏类
delete bbb.age;
由于delete操作,使得aaa和bbb就是使用的两个不相同的隐藏类。
如果想尽量避免过多的生成隐藏类,可以使用下面这两种方式避免:
//方法1:(增加属性的场景)
function cunstor(age){
this.name = 'wow';
this.age = age;
}
let aaa = new cunstor();
let bbb = new cunstor(age);
//此时aaa.age为undefined,但是aaa和bbb是共享的同一个隐藏类
//==================================================================================
//方法2:(删除属性的场景)
function cunstor(){
this.name = 'wow';
this.age = 100
}
let aaa = new cunstor();
let bbb = new cunstor();
bbb.age = null;
//在需要删除某个属性和属性值时,使用将该值赋值为null的方式,这样aaa和bbb也是指向的同一个隐藏类
5.合理运用垃圾回收机制,如在使用完变量后将其赋值为null,从而告知垃圾回收机制释放内存。
6.在某些浏览器中可以主动触发垃圾回收,如IE中window.collectGarbage()和opear7+中window.opera.collect(),但是不推荐使用。
7.静态分配,减少块级作用域中变量的重复声明(通常用不到这么极端的优化方法)
//如果这个函数的使用周期很短,垃圾回收就会很快介入将result所占内存空间清理出来,这种情况下频繁使用test1函数会造成result的频繁声明和垃圾回收机制的频繁介入,影响性能。
funciton test1(num1,num2){
let result = new otherRes();
reault.a += num1;
result.b += num2;
}
//可以使用这种方式,把result定义在外边,这样频繁使用该函数的时候就不会频繁触发垃圾回收。
let result = new otherRes();
funciton test1(num1,num2){
reault.a += num1;
result.b += num2;
}
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!