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


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

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

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

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

  • 相关阅读:
    Java泛型
    Jenkins+Docker+SpringCloud微服务持续集成(下)
    计算机毕业设计Java爱馨敬老院网站(源码+系统+mysql数据库+lw文档)
    分享一个用HTML、CSS和jQuery构建的漂亮的登录注册界面
    torch.jit.trace与torch.jit.script的区别
    verilog刷题:LFSR 产生特定序列
    如何抓取 GitHub:实用教程 2024
    Python函数详解(二)——函数的参数传递基础
    linux--进程3)
    带你掌握如何查看并读懂昇腾平台的应用日志
  • 原文地址:https://blog.csdn.net/fakerlove/article/details/132730524