2022-04-07 03:26:43
JavaScript 中缓存数据的主要方法包括浏览器缓存、IndexedDB、Web Storage(localStorage 和 sessionStorage)、内存缓存以及服务端缓存。以下是具体说明:
浏览器缓存浏览器缓存通过存储最近访问的资源(如 HTML、CSS、图像等)的本地副本来减少加载时间。当用户再次访问网站时,浏览器会优先从缓存中加载资源,而非从服务器重新下载。
控制缓存行为:可通过 Cache-Control 头设置缓存策略,例如指定资源过期时间(max-age)或强制缓存(no-cache)。
适用场景:静态资源(如图片、样式表)的长期存储,提升重复访问速度。
IndexedDBIndexedDB 是一个用于创建和管理本地数据库的 JavaScript API,支持事务、索引和复杂数据结构存储。
特点:
数据持久化存储,即使关闭浏览器或窗口也不会丢失。
支持事务性操作,确保数据一致性。
适合存储大量结构化数据(如用户生成内容)。
示例代码:const request = indexedDB.open('MyDatabase', 1);request.onupgradeneeded = (event) => { const db = event.target.result; const store = db.createObjectStore('MyObjectStore', { keyPath: 'id' });};
Web StorageWeb Storage 包含 localStorage 和 sessionStorage,用于存储键值对数据。
localStorage:
数据持久化,浏览器关闭后仍保留。
适合存储用户偏好或全局状态(如主题设置)。
示例:localStorage.setItem('theme', 'dark');const theme = localStorage.getItem('theme');
sessionStorage:
数据仅在当前会话(标签页)有效,关闭后清除。
适合存储临时会话数据(如表单输入)。
示例:sessionStorage.setItem('tempData', '123');
内存缓存内存缓存将数据临时存储在计算机内存中,提供极快的读写速度,但数据在内存清空或应用关闭时丢失。
实现方式:
使用 JavaScript 的 Map 对象或第三方库(如 Dexie.js)。
适合存储频繁访问的临时数据(如计算结果)。
示例:const memoryCache = new Map();memoryCache.set('key', 'value');const value = memoryCache.get('key');
服务端缓存服务端缓存将数据存储在服务器端(如 Redis、Memcached),客户端请求时直接返回缓存数据,减少数据库查询。
优势:
降低数据库负载,提升应用可扩展性。
适合高频访问的动态数据(如 API 响应)。
实现方式:
服务器端设置缓存中间件(如 Express 的 cache-control)。
使用 CDN 缓存静态资源。
选择建议: