首页 > web前端 > js教程 > 正文

如何在javascript中实现缓存机制_怎样设置缓存策略和过期时间?

狼影
发布: 2025-12-19 22:36:10
原创
572人浏览过
JavaScript缓存需自主管理生命周期,内存缓存用Map+时间戳判断TTL,localStorage需手动添加expiresAt字段,推荐封装支持LRU、TTL和多存储策略的缓存类,并注意异常处理与服务端缓存头协同。

如何在javascript中实现缓存机制_怎样设置缓存策略和过期时间?

在 JavaScript 中实现缓存机制,核心是“按需存储 + 主动控制过期”,而不是依赖浏览器自动缓存(如 HTTP Cache),因为 JS 运行在内存或本地存储中,需要自己管理生命周期。

内存缓存(Map 或 Object)+ 时间戳判断

适合短期、高频、轻量数据(如 API 响应、计算结果)。用 Map 存储值和创建时间,读取时检查是否过期:

  • 写入时记录 timestampttl(毫秒)
  • 读取前比对 Date.now() - timestamp > ttl,超时则删除并返回 null
  • 示例:缓存用户信息 5 分钟
const cache = new Map();
function setCache(key, value, ttl = 300000) {
  cache.set(key, { value, timestamp: Date.now(), ttl });
}
function getCache(key) {
  const item = cache.get(key);
  if (!item) return undefined;
  if (Date.now() - item.timestamp > item.ttl) {
    cache.delete(key);
    return undefined;
  }
  return item.value;
}

localStorage / sessionStorage + 过期字段

适合需跨页面/会话保留但有明确时效的数据(如登录态 token、配置项)。浏览器原生存储不支持自动过期,必须手动加字段:

  • 存入时写入 expiresAt(时间戳),读取时校验
  • 避免直接存原始值,统一包装为对象:{ data: ..., expiresAt: 171xxxxxx }
  • 注意:localStorage 容量有限(通常 5–10MB),不适合大文件或大量缓存

封装一个带策略的缓存类(推荐)

把过期、清理、存储方式封装起来,提升复用性。支持 LRU 驱逐 + TTL + 自定义存储目标:

AI发型设计
AI发型设计

虚拟发型试穿工具和发型模拟器

AI发型设计 247
查看详情 AI发型设计

立即学习Java免费学习笔记(深入)”;

  • 构造时指定最大容量、默认 TTL、底层存储(memory / localStorage)
  • set(key, value, options?) 支持单次覆盖 TTL
  • get(key) 自动清理过期项,并可选触发刷新逻辑(如重新请求)
  • 关键细节:读写都应做 try-catch,尤其 localStorage 可能因配额满或禁用而失败

配合服务端缓存头(补充说明)

JS 本身不控制 HTTP 缓存,但可通过 fetchcache 选项协同后端策略:

  • cache: 'default' 尊重响应头 Cache-Control
  • cache: 'no-cache' 强制验证(发 HEAD 请求)
  • 后端设置 Cache-Control: public, max-age=3600前端 fetch 即可自动缓存 1 小时
  • 注意:Service Worker 可拦截请求,实现更精细的缓存控制(如 Cache API),但属于进阶场景

以上就是如何在javascript中实现缓存机制_怎样设置缓存策略和过期时间?的详细内容,更多请关注php中文网其它相关文章!

java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号