通过对象轮换实现 LRU 缓存结构

文章目录

  • 通过两个对象轮换,按照是否访问实现内容长久保存
  • rollup 的缓存实现
javascript 复制代码
export default function (max) { //max 缓存容量
	var num, curr, prev;
	var limit = max || 1;

	function keep(key, value) {
		if (++num > limit) {
			prev = curr; // 超过容量时当前对象变成缓存
			reset(1);
			++num;
		}
		curr[key] = value;
	}
	// 1 是否清空缓存
	function reset(isPartial) {
		num = 0;
		curr = Object.create(null);
		isPartial || (prev=Object.create(null));
	}

	reset();

	return {
		clear: reset,
		has: function (key) {
			return curr[key] !== void 0 || prev[key] !== void 0;
		},
		get: function (key) {
			var val = curr[key];
			if (val !== void 0) return val;
			if ((val=prev[key]) !== void 0) { // 访问到缓存内容,让内容不过期
				keep(key, val); // 访问提取缓存,减少容量
				return val;
			}
		},
		set: function (key, value) {
			if (curr[key] !== void 0) {
				curr[key] = value;
			} else {
				keep(key, value); // 设置新内容,减少容量
			}
		}
	};
}
相关推荐
研☆香13 小时前
jQuery特殊属性操作方法
前端·javascript·jquery
ShiJiuD66688899913 小时前
外卖项目总结下 (前端板块)
前端
暖阳华笺13 小时前
【数据结构与算法】哈希专题
数据结构·c++·算法·leetcode·哈希算法
LuminousCPP13 小时前
数据结构 - 单链表第二篇:单链表进阶操作
c语言·数据结构·笔记·链表
玖玥拾13 小时前
C/C++ 数据结构(三)链表核心算法
c语言·数据结构·c++·链表
liming49513 小时前
Maven中央库迁移
服务器·前端·maven
变量未定义~13 小时前
摆放小球 、dp求解组合数、求解组合数2
数据结构·算法
努力的lpp13 小时前
渗透主流工具完整参数手册(sqlmap、Nmap、Hydra、Dirsearch、Xray)
javascript·网络协议·测试工具·安全·http·工具
problc13 小时前
用 JavaScript 打开中国的版式文档:@sharp9/ofdjs 诞生记
开发语言·javascript·ecmascript
一头老黄牛@13 小时前
飞书 × OpenClaw 接入指南:不用服务器,用长连接把机器人跑起来
数据结构·人工智能·程序人生·算法·决策树·自动化·推荐算法