📜  Lodash _.memoize() 方法(1)

📅  最后修改于: 2023-12-03 15:17:25.941000             🧑  作者: Mango

Lodash _.memoize() 方法

Lodash是一款流行的JavaScript工具库,其中包含了许多实用的函数,其中之一就是**_.memoize()**方法。这个方法可以帮助我们优化程序性能,它的作用是缓存函数的计算结果,从而避免重复计算。

语法
_.memoize(func, [resolver])
  • func: 需要缓存的函数。
  • resolver: 可选参数,它决定如何计算缓存的键值。默认值是使用第一个参数作为缓存键值。
示例

假设我们有一个需要耗时计算的函数,如下所示:

function expensiveCalculation(num) {
  console.log('Performing expensive calculation...');
  return num * 2;
}

现在假设我们需要在多个地方调用这个函数,并且每一次调用时都要重新计算结果。这会浪费很多时间,尤其是当这个函数的计算复杂度较高时。这时我们就可以使用_.memoize()方法进行优化:

const memoizedCalculation = _.memoize(expensiveCalculation);

console.log(memoizedCalculation(3)); // Performing expensive calculation... 6
console.log(memoizedCalculation(3)); // 6

观察上面的代码,你会发现第一次调用memoizedCalculation()时,会打印出Performing expensive calculation...。但是第二次调用时,并没有打印出这个信息,因为结果已经被缓存起来了。这使得程序运行更快,并且减少了重复计算的时间。

此外,我们也可以使用resolver参数,来指定如何计算缓存键值:

function expensiveCalculation(num1, num2) {
  console.log('Performing expensive calculation...');
  return num1 + num2;
}

const memoizedCalculation = _.memoize(expensiveCalculation, (num1, num2) => `${num1},${num2}`);

console.log(memoizedCalculation(3, 4)); // Performing expensive calculation... 7
console.log(memoizedCalculation(3, 4)); // 7

在这个例子中,我们指定了resolver函数,将两个参数拼接成一个字符串作为缓存键值。这使得当我们传入相同的两个参数时,结果会被缓存起来。