js实现的LRU缓存function
来源:互联网 发布:apache maven怎么安装 编辑:程序博客网 时间:2024/05/16 10:57
j
Python有这样一个叫做lru_cache的装饰器,缓存函数的返回值,极大的提高了递归和其它编程的效率
在做js函数式编程的时候,发现缺少这么一个模块,所以手写了一个
实现
先看看实现
'use strict'// lru缓存模块const LRU = require('lru')const lru_func = (f, maxCache = 10) => { f.cache = f.cache || new LRU(maxCache) return function(...args) { const key = JSON.stringify(args); var result = f.cache.get(key) || f.apply(undefined, args); f.cache.set(key, result); return result; }}module.exports = lru_func;
由于某一些特性当前v8引擎还不支持,所以用到了babel进行编译
逻辑
很简单的逻辑,将原函数代理一遍,调用的时候根据参数返回缓存值,或者调用原函数进行缓存
Usage
'use strict'const lru_it = require('lru-func');const arr_len = 30, call_num = 0, fibo_arr = [];const fibo = lru_it((length) => { call_num += 1; return length <= 2 ? 1 : fibo(length - 1) + fibo(length - 2)});for (let i = 1; i <= arr_len; i++) fibo_arr.push(fibo(i));console.log(`with lru cache\nfibo(1:${arr_len})=${[fibo_arr]}\ninvoke fibo function ${call_num} times\n`)
result
with lru cachefibo(1:30)=1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,[......省略]invoke fibo function 30 times
作为对比
without lru cachefibo(1:30)=1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,[......省略]invoke fibo function 4356586 times
如果你对为什么不使用缓存会调用400w次感到疑惑,不妨深入研究一下,甚至可以整理出一个通项
其他
代码托管在这里
npm网页在这里
0 0
- js实现的LRU缓存function
- js实现的一个lru缓存
- Lru缓存的简单实现
- 简单的LRU缓存实现
- LRU缓存的java实现
- LRU缓存的JavaScript实现
- LRU缓存的javascript实现
- 哈希链表实现的LRU缓存算法
- LRU缓存的实现算法讨论
- 基于LRU算法的缓存实现
- LinkedList实现基于LRU算法的缓存
- LinkedHashMap实现简单的LRU缓存
- LRU在MySQL缓存池的实现
- LRU缓存实现(Java)
- LRU缓存实现(Java)
- LRU缓存实现(Java)
- LRU缓存实现(Java)
- LRU缓存实现(Java)
- 超稳定Expandablelistview,带优化,带联网
- VisualVM通过jstatd方式远程监控远程主机
- webstorm 下载并设置jade、less
- Graphviz#基本用法
- 警惕Mybatis的Foreach的的副作用
- js实现的LRU缓存function
- 360度民主评估反馈系统可以使用啦
- quartz定时任务框架
- 开启mysql 远程链接
- 单点登录,简单实现
- 数据类型之整型
- python安装paramiko
- Opencv实现盲水印技术(三)——傅里叶变换算法及盲水印实现
- 简单UIWebView加载网页仿微信进度条