js代码性能优化分析

减少判断层级

function doSomething (part, chapter){
    const parts = ['ES2016', '工程化', 'vue', 'react', 'Node']
    if(!part){
        console.log('请确认模块信息');
        return;
    }
    if(!parts.includes(part)){
       return;
    }
    console.log('属于当前课程');
    if(chapter > 5){
        console.log('您需要提供VIP身份')
    }
}
doSomething('ES2016', 6);

提前return的方式减少嵌套层级

减少作用域链查找层级

var name = 'abc';
function foo () {
   var name = 'abc123' //name在当前作用域中,减少层级查找
    function baz () {
        var age = 38;
        console.log(age);
        console.log(name)
    }
    baz();
}
foo();

每当一个函数执行时都会产生一个执行上下文

当函数执行完之后,执行上下文被销毁掉(闭包除外)

多次调用函数时候,就会创建多个上下文
这些上下文都是有自己的作用域的
作用域之间又可以通过作用域链连接

函数执行过程中,每遇到一个变量,就先搜索自己的作用域
如果有,就用自己的,没有的话就沿着作用域链往上查找,
一直到父层

所以变量离作用域近,执行效率更高一些
如果从时间上看,就快
如果从空间上看,定义多变量会多消耗空间

减少数据读取次数

var oBox = document.getElementById('skip');
   // function hasEle(ele, cls){
    //     return ele.className === cls
    // }
    //优化,缓存对象的值
    function hasEle(ele, cls){
        var clsName = ele.className;
        return clsName === cls
    }
    console.log(hasEle(oBox, 'skip')); //true

访问字面量,局部变量 速度快,直接存放栈区中

数组,对象, 访问数组和对象成员,相对慢些,因为要根据引用关系先找到在堆内存中的位置,对象的属性访问还要考虑原型链上的查找,应该减少对象查找次数和属性的嵌套层级

提前对数据缓存,方便后面使用

减少循环体中的活动

var test = () => {
    var i
    var arr = ['joy', 20, 'test']
    for(i = 0; i < arr.length; i++){
        console.log(arr[i])
    }
}

//将经常使用又不发生改变的量缓存起来
var test1 = () => {
    var i
    var arr = ['joy', 20, 'test']
    var len = arr.length
    for(i = 0; i < len; i++){
        console.log(arr[i])
    }
}

//while循环优化
//代码量减少,递减,到0自动结束
var test2 = () => {
    var arr = ['joy', 20, 'test']
    var len = arr.length
    while(len--){
        console.log(arr[len])
    }
}
test()
test1()
test2()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值