此处收集一些代码性能提升方面的细节,持续更新
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’浏览器运行逻辑
- 在内存创建一个临时字符串
- 连接后的字符onetwo赋值给临时字符串
- 临时字符串与str当前值连接
- 结果赋值给str
优化: str = str + ‘one’ + ‘two’;
- 以str为基础加上one
- 再加上two
- 当前值赋给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)这个帧栈,减小空间复杂度。