高性能js之算法和流程控制

大多数编程语言中,代码执行时间大部分消耗在循环中,所以循环也是提升性能的重要环节之一

循环:

-1 for in循环
-2 for循环
-3 do while循环
-4 .while循环

for in循环可以枚举任何对象的属性名(不是值),但是for in比其他三个循环明显要慢,所以除非要迭代一个属性数量未知的对象,否则避免使用for in循环,如果遍历一个属性数量已知属性列表,其他循环比for in快,比如:

var arr = ['name','age'],
        i = 0;
    while(i < arr.length){
        process(object[arr[i]]);
    } 
//怎么获取对象属性名呢?Object.keys(object)

基于函数的迭代:forEach():
forEach遍历一个数组的所有成员,并执行一个函数
但是所有情况下,基于循环的迭代比基于函数的迭代快8倍,在运行速度要求严格时,基于循环的迭代优先于基于函数的迭代

条件语句

if-else对比switch:
当条件较少时 使用if-else更易读,而当条件较多时if-else性能负担比switch大,易读性也没switch好。
优化if-else的方法是:尽可能的把可能出现的条件放在首位,比如:

var i = Math.random(1);     
    if(i <= 0.8){            //i小于0.8是几率最大的,如果i的值满足i <= 0.8 后面的条件就不会再判断了
        ...
    }else if(i > 0.8 && i <= 0.9){
        ...
    }else{
        ...
    }

Memoization

利用缓存,减少计算

function memoizeA(n) {
                if(!memoizeA.cache){
                    memoizeA.cache = {
                        '0': 1,
                        '1': 1
                    }
                }
                if(!memoizeA.cache.hasOwnProperty(n)){
                    memoizeA.cache[n] = n * memoizeA(n-1)
                }
                return memoizeA.cache[n]
            }

            var a1 = memoizeA(4)
            console.log(a1)          //24
            var a2 = memoizeA(5)
            console.log(a2)            //120
            var a3 = memoizeA(6)
            console.log(a3)           //720

你可能感兴趣的:(高性能js之算法和流程控制)