分类
性能

代码性能

此处收集一些代码性能提升方面的细节,持续更新

for循环

  • for(let i=0,len=arr.length;i<len;i++)比for(let i=0;i<=arr.length;i++)更快
  • 当复杂度等于O(n)着重减少每次迭代的工作量,当复杂度大于O(n)着重减少迭代次数
  • forEach比for慢

条件语句

  • if适合判断范围
  • 当判断离散值多余两个是选择switch而不是if
  • 当有大量的离散值更适合查找表,const arr = [result1,result2,…,result100]; return arr[index];

字符串连接

str+= ‘one’ + ‘two’浏览器运行逻辑

  1. 在内存创建一个临时字符串
  2. 连接后的字符onetwo赋值给临时字符串
  3. 临时字符串与str当前值连接
  4. 结果赋值给str

优化: str = str + ‘one’ + ‘two’;

  1. 以str为基础加上one
  2. 再加上two
  3. 当前值赋给str

结果少了一步创建临时字符串的过程,所以速度加快,若str = ‘one’ + str + ‘two’则优化无效

vue-使用函数式组件

递归

尾调用优化

// 优化后和优化前对比 
function factorial(n) {
        function fact(n, res) {
            if(n<2) return res;
            return fact(n-1,n*res);
        }
        return fact(n,1);
    }
    function _factorial(n) {
        if (n===1) return 1;
        return n*_factorial(n-1);
    }

原理:优化前的递归要为每次调用开辟一个帧栈,优化后可以重用fact(n,1)这个帧栈,减小空间复杂度。