0

0

如何实现Javascript的缓存策略_怎样用Javascript优化数据请求?

紅蓮之龍

紅蓮之龍

发布时间:2025-12-31 22:57:08

|

746人浏览过

|

来源于php中文网

原创

缓存策略的核心是控制请求是否发出,JavaScript通过Map内存缓存、fetch自定义cache模式及localStorage持久化实现业务级缓存,需结合过期机制与缓存键设计。

如何实现javascript的缓存策略_怎样用javascript优化数据请求?

缓存策略的核心其实是「控制请求是否发出」

JavaScript 本身不提供全局缓存机制,所谓“JS 缓存策略”,本质是开发者在 fetchXMLHttpRequest 发起前,主动判断:这个数据我有没有、还新不新?该不该跳过网络请求?浏览器的 HTTP 缓存(如 Cache-Control)由服务端控制,JS 层能做的,是补充它做不到的事——比如按业务逻辑缓存用户偏好、临时 token、列表页筛选结果等。

用 Map + 时间戳实现轻量级内存缓存

适合短期、单页生命周期内的数据复用,比如搜索建议、用户资料快照。不用引入第三方库,几行就能落地:

const memoryCache = new Map();
<p>function getCachedData(key) {
const item = memoryCache.get(key);
if (!item) return null;
if (Date.now() - item.timestamp > 5 <em> 60 </em> 1000) { // 5 分钟过期
memoryCache.delete(key);
return null;
}
return item.value;
}</p><p>function setCachedData(key, value) {
memoryCache.set(key, {
value,
timestamp: Date.now()
});
}</p>
  • MapObject 更适合做缓存键(支持任意类型 key,包括对象引用)
  • 过期时间写死在代码里容易失控,建议抽成配置项或从响应头读取 max-age
  • 注意:页面刷新后 Map 清空,这不是 bug,是预期行为;要持久化请用 localStorageindexedDB

fetch 配合 cache mode 和自定义缓存键

浏览器原生 fetch 支持 cache 选项,但默认只响应服务端设置的 Cache-Control。想绕过它、强制走 JS 控制逻辑,就得禁用浏览器缓存:

  • cache: 'no-store':每次请求都发出去,JS 自己决定要不要用缓存值
  • cache: 'only-if-cached':仅从 HTTP 缓存取,失败直接 reject(需配合 credentials: 'same-origin' 等限制)
  • 缓存键不能只用 URL:带 token 的请求、不同分页参数的列表,URL 相同但内容不同 → 应拼接关键参数生成唯一 cacheKey

示例中避免重复请求同一用户资料:

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

Magic AI Avatars
Magic AI Avatars

神奇的AI头像,获得200多个由AI制作的自定义头像。

下载
const userCache = new Map();
<p>async function fetchUser(userId) {
const cacheKey = <code>user:${userId}</code>;
const cached = getCachedData(cacheKey);
if (cached) return cached;</p><p>const res = await fetch(<code>/api/users/${userId}</code>, {
cache: 'no-store' // 不让浏览器插手
});
const data = await res.json();
setCachedData(cacheKey, data);
return data;
}</p>

localStorage 缓存要注意序列化和容量限制

适合保存用户设置、离线可用的静态资源路径等低频更新数据。但别把它当数据库用:

  • localStorage.setItem() 只接受字符串,必须用 JSON.stringify(),取回时要 JSON.parse(),失败会静默抛错
  • 多数浏览器上限约 5–10MB,单个 key 值超长可能触发 QuotaExceededError
  • 不同协议/端口/子域名间不共享,http://a.comhttps://a.com 是两个独立空间
  • 没过期机制,自己加 expires 字段并每次读取时校验

简单封装防崩:

function safeSetItem(key, value) {
  try {
    localStorage.setItem(key, JSON.stringify({
      value,
      expires: Date.now() + 24 * 60 * 60 * 1000 // 24 小时后过期
    }));
  } catch (e) {
    console.warn('localStorage full or blocked:', e);
  }
}
<p>function safeGetItem(key) {
try {
const item = localStorage.getItem(key);
if (!item) return null;
const parsed = JSON.parse(item);
if (parsed.expires && Date.now() > parsed.expires) {
localStorage.removeItem(key);
return null;
}
return parsed.value;
} catch (e) {
console.warn('JSON parse failed for', key, e);
return null;
}
}</p>

真正难的不是写几行缓存代码,而是判断哪些数据值得缓、缓多久、失效时怎么通知 UI 更新——这些都得贴着业务来定,没有通用解。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

457

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

547

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

335

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

82

2025.09.10

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

847

2023.08.22

登录token无效
登录token无效

登录token无效解决方法:1、检查token的有效期限,如果token已经过期,需要重新获取一个新的token;2、检查token的签名,如果签名不正确,需要重新获取一个新的token;3、检查密钥的正确性,如果密钥不正确,需要重新获取一个新的token;4、使用HTTPS协议传输token,建议使用HTTPS协议进行传输 ;5、使用双因素认证,双因素认证可以提高账户的安全性。

6608

2023.09.14

登录token无效怎么办
登录token无效怎么办

登录token无效的解决办法有检查Token是否过期、检查Token是否正确、检查Token是否被篡改、检查Token是否与用户匹配、清除缓存或Cookie、检查网络连接和服务器状态、重新登录或请求新的Token、联系技术支持或开发人员等。本专题为大家提供token相关的文章、下载、课程内容,供大家免费下载体验。

842

2023.09.14

token怎么获取
token怎么获取

获取token值的方法:1、小程序调用“wx.login()”获取 临时登录凭证code,并回传到开发者服务器;2、开发者服务器以code换取,用户唯一标识openid和会话密钥“session_key”。想了解更详细的内容,可以阅读本专题下面的文章。

1092

2023.12.21

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

76

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 6万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 3.4万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

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