恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

简单的JS 应用层缓存

  • 首页
  • 资讯中心
  • /
  • 简单的JS 应用层缓存

相关资讯

快速构建MCP服务器:从协议解析到工具开发实战 2026/10/14 17:14:13
AI写代码测试全绿,接入Cocos却白屏?微信小游戏开发踩坑复盘 2026/10/14 17:09:13
百考通AI让每一位学生都能轻松应对答辩,自信展示研究成果 2026/10/14 17:09:13

最新资讯

Zynq lwIP TCP调试全攻略:从环境配置到Wireshark抓包定位
2026企业微信费用,不同规模企业成本参考指南
Unity Google分包后CRI音视频加载失败:机制拆解与排查方案
2026智慧机场三维可视化系统推荐:企业数字化可视化服务商介绍
2026年北京GEO公司效果怎么衡量?该定哪些指标
openJiuwen agent-core-java 的 Pregel ChannelManager:channel 缓冲、刷新与 ready 节点判定机制详解

今日推荐

IBM Verify Identity Access 修复 22 个漏洞:两个 9.8 严重 RCE 无需认证
小区物业管理系统
小型超市仓库管理系统

本周热门

UE动画修改实战:从资产编辑到重定向与蒙太奇驱动
统计随机数生成器攻击下的KLJN安全密钥交换协议Matlab仿真
政务API安全治理:资产测绘、低代码编排与行标对标实践

本月精选

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)

简单的JS 应用层缓存

发布时间:2026/10/14 17:14:13
简单的JS 应用层缓存 实现前端JS 应用层缓存最简单的思路是用Map做内存缓存用localStorage做持久化再加一个过期时间 TTL。就像手边便签 抽屉笔记本 保质期。简单前端缓存类/** * 简单前端缓存类 * 特点 * 1. 内存 Map读写快页面刷新后消失 * 2. localStorage持久化页面刷新后还在 * 3. TTL给每条缓存设置过期时间 */ class SimpleCache { /** * param {string} prefix 缓存键前缀避免和 localStorage 里其他数据冲突 * param {Storage} storage 存储对象默认 localStorage也可以传 sessionStorage */ constructor(prefix cache:, storage localStorage) { this.prefix prefix; this.storage storage; this.memory new Map(); } /** * 生成真正存到 localStorage 里的 key * 例如 prefixmy-app:keyuser返回 my-app:user */ _key(key) { return this.prefix key; } /** * 写入缓存 * param {string} key 缓存键 * param {*} value 缓存值必须能被 JSON.stringify 序列化 * param {number} ttl 过期时间单位毫秒0 表示永不过期 */ set(key, value, ttl 0) { const record { value, expire: ttl 0 ? Date.now() ttl : 0 }; this.memory.set(key, record); try { this.storage.setItem(this._key(key), JSON.stringify(record)); } catch (e) { console.warn(缓存写入失败, e); } } /** * 读取缓存 * param {string} key * returns {*} 缓存值没找到或已过期返回 undefined */ get(key) { let record this.memory.get(key); if (!record) { const raw this.storage.getItem(this._key(key)); if (!raw) return undefined; try { record JSON.parse(raw); this.memory.set(key, record); } catch (e) { return undefined; } } if (record.expire Date.now() record.expire) { this.remove(key); return undefined; } return record.value; } /** * 判断缓存是否存在且未过期 */ has(key) { return this.get(key) ! undefined; } /** * 删除某个缓存 */ remove(key) { this.memory.delete(key); this.storage.removeItem(this._key(key)); } /** * 清空当前前缀下的所有缓存 */ clear() { this.memory.clear(); for (let i this.storage.length - 1; i 0; i--) { const k this.storage.key(i); if (k k.startsWith(this.prefix)) { this.storage.removeItem(k); } } } }使用示例// 创建一个缓存实例所有 key 都会带 my-app: 前缀 const cache new SimpleCache(my-app:); // 写入缓存有效期 10 秒 cache.set(user, { name: 小明, age: 18 }, 10 * 1000); // 读取缓存 console.log(cache.get(user)); // 输出{ name: 小明, age: 18 } // 10 秒后再读取 setTimeout(() { console.log(cache.get(user)); // 输出undefined因为已经过期并被自动删除 }, 10000);封装请求缓存// 专门给接口请求用的缓存实例 const apiCache new SimpleCache(api:); /** * 带缓存的请求函数 * * param {string} url 请求地址 * param {number} ttl 缓存时间默认 60 秒 * returns {Promiseany} 接口数据 */ async function request(url, ttl 60 * 1000) { // 先尝试读缓存 const cached apiCache.get(url); // 如果缓存存在直接返回不再发请求 if (cached ! undefined) { return cached; } // 缓存没有真正发起网络请求 const res await fetch(url); const data await res.json(); // 请求成功后写入缓存并设置过期时间 apiCache.set(url, data, ttl); // 返回最新数据 return data; }关键点总结内存Map负责快优先从内存读减少localStorage读写次数。localStorage负责持久页面刷新后缓存还在。ttl负责过期避免一直读到旧数据。prefix负责隔离避免不同项目、不同模块的缓存 key 冲突。只适合可序列化数据函数、Map、Set、Date等经过JSON.stringify后可能变形。敏感信息不要放localStorage例如密码、完整 token 要谨慎。

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号