通过对象轮换实现 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); // 设置新内容,减少容量
			}
		}
	};
}
相关推荐
LuHang19 分钟前
从天地图切换到高德地图:一次真实的底图迁移实战
前端·vue.js·cesium
用户3600555790022 分钟前
Kestrel_VLLM - 27 · 寄存器常驻与融合发射:两次「少发一次」
前端
前端小万25 分钟前
用"道法术器"重构你和 AI 的协作方式
前端·人工智能·程序员
鶴哥只手遮天30 分钟前
Angular 22 源码级深度解析-第 06 章 模板指令全解:`ɵɵelementStart`、`ɵɵproperty`、`ɵɵadvance` 与绑定指令
前端·开源·angular.js
D e re k ZH31 分钟前
C++ 并发、未定义行为与工程化难点(No 3)
数据结构·c++·算法·面试
像我这样帅的人丶你还40 分钟前
我html生成的doc文档为何在手机文档显示不了图片?
前端·javascript
前端双越老师2 小时前
程序员 1v1 访谈系列第十期:纯前端坚持不了多久了
前端·ai编程·全栈
La Pulga3 小时前
【FreeRTOS源码学习笔记】链表的实现
数据结构·笔记·stm32·mcu·链表·嵌入式·freertos
门思科技4 小时前
LoRaWAN 网络排障的五层漏斗:从"上不到云"到"数值不对",每一层该用什么工具证明
前端
计算机魔术师4 小时前
Cursor 官方插件商城现恶意 Claude Code 扩展,约 11 小时影响最多 5000 名开发者
前端