MST

星途 面试题库

面试题:JavaScript 求值表达式优化之高级题

在一个复杂的 JavaScript 应用中有如下代码片段:`function calculate(a, b, c) { let result = (a + b) * c; if (result > 100) { result = result / 2; } return result; }`,现在需要频繁调用这个函数进行大量计算,从性能优化角度分析这段求值表达式代码并给出优化建议及优化后的代码。
24.7万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试

性能分析

  1. 运算顺序:目前的代码在进行计算时,先计算 (a + b) * c,这是常规的数学运算顺序,没有明显问题。
  2. 条件判断:每次计算完 (a + b) * c 后,都会进行一次条件判断 if (result > 100)。如果在大量计算中,大部分结果都不满足这个条件,那么这个条件判断就会成为性能瓶颈。

优化建议

  1. 减少条件判断次数:可以先对输入的参数 abc 进行分析,看是否能提前判断出结果是否会大于 100。例如,如果 abc 都是正数,并且 (a + b) * c 明显小于等于 100 的情况下,可以避免不必要的条件判断。
  2. 缓存结果:如果函数的输入参数有重复的情况,可以使用缓存机制,避免重复计算。

优化后的代码

// 使用缓存
const cache = {};
function calculate(a, b, c) {
    const key = `${a},${b},${c}`;
    if (cache[key]) {
        return cache[key];
    }
    let result = (a + b) * c;
    if (result > 100) {
        result = result / 2;
    }
    cache[key] = result;
    return result;
}
// 提前判断避免条件判断
function calculate(a, b, c) {
    if (a >= 0 && b >= 0 && c >= 0 && (a + b) * c <= 100) {
        return (a + b) * c;
    }
    let result = (a + b) * c;
    if (result > 100) {
        result = result / 2;
    }
    return result;
}