性能瓶颈分析
- 函数调用开销:在
outer
函数的循环中,每次都调用 inner
函数。函数调用在 JavaScript 中有一定的开销,包括创建新的执行上下文、传递参数等操作。
- 计算重复:
inner
函数每次计算 j * j
,如果这个值在其他地方不需要动态变化,这种重复计算会浪费性能。
优化建议
- 内联函数:将
inner
函数的逻辑直接写在 outer
函数的循环中,避免函数调用开销。
function outer() {
let result = 0;
for (let i = 0; i < 10000; i++) {
result += i * i;
}
return result;
}
- 使用更高效的算法(如果适用):对于求平方和,在数学上有更高效的公式,如
n(n + 1)(2n + 1)/6
。
function outer() {
const n = 10000;
return n * (n + 1) * (2 * n + 1) / 6;
}
性能提升原理
- 内联函数:减少了函数调用的开销,包括执行上下文的创建和销毁、参数传递等操作,使得循环执行速度更快。
- 高效算法:使用数学公式直接计算平方和,避免了循环中的重复计算,时间复杂度从 O(n) 降低到 O(1),极大提升了性能,尤其是当数据规模很大时。