• JavaScipt中如何实现函数缓存?函数缓存有哪些场景?


    1、函数缓存是什么?
    函数缓存就是将函数运行的结果进行缓存。本质上就是用空间(缓存存储)换时间(计算过程)
    常用于缓存数据计算结果和缓存对象。
    在这里插入图片描述
    缓存只是一个临时的数据存储,它保存数据,以便将来对该数据的请求能够更快地得到处理。

    2、如何实现函数缓存?
    实现函数缓存主要依靠闭包,柯里化,高阶函数。
    2.1、闭包
    闭包可以理解成,函数+函数体内可访问的变量总和。
    在这里插入图片描述
    add函数本身,以及其内部可访问的变量,即a=1,这两个组合在一起就形成了闭包。

    2.2、柯里化
    把接受多个参数的函数转换成接受一个单一参数的函数
    在这里插入图片描述
    将一个二元函数拆分成两个一元函数。
    2.3、高阶函数
    通过接收其他函数作为参数或返回其他函数的函数
    在这里插入图片描述
    函数foo如何返回另一个函数bar,baz现在持有对foo中定义的bar函数的引用,由于闭包的特性,a的值可以被得到。
    下面描述如何实现函数缓存,实现原理比较简单,把参数和对应的结果数据存在一个对象中,调用时判断参数对应的数据是否存在,存在就返回对应的结果数据,否则就返回计算结果。
    在这里插入图片描述
    调用方式也比较简单
    在这里插入图片描述
    过程分析:
    在当前函数作用域定义了一个空对象,用于缓存运行结果
    运用柯里化返回一个函数,返回的函数由于闭包特性,可以访问到cache
    然后判断输入参数是不是在cache中,如果已经存在,直接返回cache中的内容,如果没存在,使用函数func对输入参数求值,然后把结果存储在cache中。

    3、应用场景
    虽然使用缓存效率非常高,但是并不是所有场景都适用,因此千万不要极端的将所有函数都添加缓存,
    以下几种情况适合使用函数缓存:
    对于昂贵的函数调用,执行复杂计算的函数
    对于具有有限且高重复输入范围的函数
    对于具有重复输入值的递归函数
    对于纯函数,即每次使用特定输入调用时返回相同输出的函数。

  • 相关阅读:
    SpringBoot自动装配 Spring相关 常用设计模式 双亲委派 MongoDB Redis 适配器模式与策略模式
    重装系统后电脑图片显示不出来怎么办
    计算机网络课后作业2023秋
    iOS自动化测试元素定位
    3D打印机常用功能码
    一起Talk Android吧(第三百九十九回:获取Bitmap的方法总结)
    RK3568的CAN驱动适配
    js对手机号进行脱敏处理
    一站式BI解决方案:从数据采集到处理分析,全面满足决策支持需求
    VS 常用的快捷键指令
  • 原文地址:https://blog.csdn.net/fakerlove/article/details/132730524