javascript中的函数缓存

javascript中的函数缓存

一、什么是函数缓存

函数缓存就是将函数运算过的结果进行缓存,本质上是用空间(缓存储存)换时间,常用于缓存数据计算结果和缓存对象。

const add = (a,b) => a+b;
const calc = memoize(add); // 函数缓存
calc(10,20);// 30
calc(10,20);// 30 缓存

缓存只是一个临时的数据存储,它能保存数据,以便将来对该数据的请求能够被更快得处理。

二、怎么实现

主要依靠闭包、柯里化、高阶函数处理。

将参数和对应的结果数据存在一个对象中,调用时判断参数对应的数据是否存在,存在就返回对应的结果数据,否则就返回计算结果。

const memoize = function (func, content) {
    let cache = Object.create(null)
    content = content || this
    return (...key) => {
        if (!cache[key]) {
            cache[key] = func.apply(content, key)
        }
        return cache[key]
    }
}

// 调用 
const calc = memoize(add);
const num1 = calc(100,200)
const num2 = calc(100,200) // 缓存得到得结果

过程:

  • 在当前函数的作用域中定义一个空对象,用于缓存运行结果
  • 柯里化一个返回函数,由于闭包特性,这个函数可以访问到cache
  • 判读输入的函数是否存在于cache中,如果已经存在,则直接返回cache中的对应的内容,如果没有,则将参数输入函数func得到运算结果,将结果存在cache中,再返回cache中的对应内容。

三、使用场景

使用缓存会使得效率得到很大的提高,适合使用缓存的情况有:

  • 昂贵的函数调用,执行复杂计算的函数
  • 具有有限且高度重复输入范围的函数
  • 具有重复输入值的递归函数
  • 纯函数,即每次使用特定输入调用时返回相同输出的函数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值