Javascript中的缓存函数

缓存函数 memozition

缓存函数: 将上次的计算结果缓存起来,当下次调用时,如果遇到相同的参数,就直接返回缓存中的数据

实现原理: 将参数和对应的结果数据存到一个对象中,调用时,判断参数对应的数据是否存在,存在就返回对应的结果数据。

使用场景: 需要大量重复的计算,或者大量计算又依赖于之前的结果

let add = (a,b) => a + b

let caiculate = memoize(a,b) // 实现缓存

calculate(10,20) // 30 首次计算

calculate(10,20) // 参数相同时,在第二次调用时,从缓存中读取数据,而不是重新计算一次

实现原理

let memoize = function(func){
    let cache = {}
    return function(key){
      if(!cache[key]){
          cache[key] = func.apply(this,arguments)
      } 
      return cache[key]
    }
}

示例:利用缓存函数计算斐波拉契数列 (0、1、1、2、3、5、8、13、21、34 、55...)

使用缓存函数前:

let count = 0;
let fibonacci = function(n){
    count++
    return n < 2 ? n : fibonacci(n-1) + fibonacci(n-2);
}

for(let i = 0; i <= 10; i++){
    fibonacci(i)  
}

console.log('执行次数:',count) // 执行次数:453

使用缓存函数后:

let memoize = function(func){
    let cache = {}
    return function(key){
      if(!cache[key]){
          cache[key] = func.apply(this,arguments)
      } 
      return cache[key]
    }
}

fibonacci = memoize(fibonacci) //使用缓存函数

for(let i = 0; i <= 10; i++){
    fibonacci(i)  
}

console.log('执行次数:',count) //执行次数12次

你可能感兴趣的:(Javascript中的缓存函数)