记住函数的计算结果,提高函数计算的性能

/*** 缓存函数* @param fn*/
interface Cache {[propName: string]: any
}interface FN {(arg: string): any
}export const memoized = (fn: FN) => {// 缓存求值 如果有则取缓存 如果没有则赋值const cache: Cache = {};return function memoiz<fnType>(arg: string): any {return cache[arg] || (cache[arg] = fn(arg));};
};
const square = <fnType>(n) => {if (!n) return 1;return n * square(--n)
};const memoizedSquare = memoized(square);memoizedSquare(5);

异步缓存求值

/*** 异步缓存求值* @param fn*/
interface AsyncFN {(arg: string): Promise<any>
}export const asyncMemoized = (fn: AsyncFN) => {// 缓存求值 如果有则取缓存 如果没有则赋值const cache: Cache = {};return async function memoiz<fnType>(arg: string): Promise<any> {cache[arg] || (cache[arg] = await fn(arg));return [cache[arg], cache];};
};

memoized函数相关推荐

  1. ngrx中的memoized函数

    Memoized顾名思义,就是带有记忆功能的函数,即把方法的执行结果缓存起来,下次调用时,如果调用函数的参数一样,那无需重复计算,直接返回之前缓存的结果. store.js: function mem ...

  2. python里面的之前打过的记忆信息-python中的记忆:如何缓存函数的运行结果(1)

    Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. 使用称为"memoization"的强大而方便的缓存技术来加速您的Python程序. ...

  3. javascript使用缓存计算来提高应用程序性能

    2019独角兽企业重金招聘Python工程师标准>>> <!doctype html> <html xmlns="http://www.w3.org/19 ...

  4. NgRx Store createSelector 返回的 selector 执行取数逻辑的单步调试

    测试源代码: import { Component } from '@angular/core'; import { createSelector } from '@ngrx/store';expor ...

  5. SAP Spartacus AuthService.getUserToken的实现

    测试代码: export class AppModule {constructor(events: EventService, client: AuthService) {const result$ ...

  6. React优化性能的经验教训

    2019独角兽企业重金招聘Python工程师标准>>> 1. 基本原理 image.png 向更大的世界迈出第一步. 1.1 render()函数 一般来说,要尽可能少地在 rend ...

  7. 【译】光速 React

    本文讲的是[译]光速 React, 原文地址:React at Light Speed 原文作者:Jacob Beltran 译文出自:掘金翻译计划 译者:ZhangFe 校对者:yzgyyang,x ...

  8. Vavr User Guide中英对照版

    Vavr User Guide(Vavr用户指南) Daniel Dietrich, Robert Winkler - Version 0.9.2,2018-10-01 0. Vavr Vavr是Ja ...

  9. node.js async循环数组的方法

    Collections 集合处理 async.forEachOf  |  eachOf(object, iterator, callback) 实现功能:遍历object对象执行iterator,报错 ...

最新文章

  1. 利益驱动 需求驱动 技术驱动 谁才是真正的驱动力?
  2. xHTML+div布局:三个div,两边div宽度固定,中间div宽度自适应
  3. Linux服务器上最简单的Nginx反向代理配置
  4. MySQL优化 之 Discuz论坛优化
  5. GridFS删除文件代码示例
  6. 解决KMP看高清电影背景声大说话声小问题
  7. 《集体智慧编程》第五章 优化
  8. 实录:menu.1st配置错误导致从多路径启动失败
  9. java获取tomcat路径
  10. 【转】Windows下部署Appium教程(Android App自动化测试框架搭建)
  11. 【学习笔记】Java工程师成神之路-基础篇
  12. 图形验证码识别接口(免费)
  13. 牛客网--23803--DongDong认亲戚
  14. 重庆交通大学计算机科学与技术怎么样,计算机科学与技术 大学实力哪家强?(干货)...
  15. 在scrapy里使用cookie获取美团外卖的数据
  16. 第六章、Tiny4412 U-BOOT移植六 Nand Flash源码分析
  17. 数学分析第一型曲面积分2021.6.5
  18. Chapter8.4:非线性控制系统分析考研参考题
  19. 每日蓝桥-基础练习 字母图形
  20. 区块链高级开发语言Lity入门指南(一)

热门文章

  1. LFSR线性反馈移位寄存器循环码编码原理
  2. msysgit使用注意
  3. NLP-D9-第一场大数据比赛D1知识蒸馏翻译论文CATTI备考-第一套综合
  4. 华为运营商级路由器配置示例 | 配置OptionA方式跨域BGP AD VPLS示例
  5. 常用的数据分布(泊松分布,二项分布,伯努利分布,正态分布,均匀分布等)
  6. ngrok--免费好用的外网映射工具
  7. 从零学习 InfiniBand-network架构(九) —— IB协议中子网本地地址
  8. 如何使用FT2232H适配器和开源调式工具OpenOCD对ARM Cortex M7系列MCU进行SWD接口调试
  9. 遍历指定目录下指定类型文件的函数(fatkun Fix版)
  10. UE4 视角切换,从第一人称角色的视角切换到第三人称角色的视觉