浏览器缓存工具

Cache 是基于 localStorage 的轻量缓存工具。它以缓存空间隔离数据,并提供内存复用、过期控制、字段更新和清理能力,适合保存页面状态、用户偏好及不频繁变化的接口数据。

快速开始

先创建一个具名缓存实例,再通过 set() 保存对象。相同名称始终复用同一个实例,不同名称之间的数据互不影响。

const userCache = GB.Cache('user');

userCache.set({
  id: 1,
  name: 'zhoubo'
}, 3600);

console.log(userCache.get('name'));
// zhoubo

安装与引入

浏览器直接引入

在业务脚本之前引入,之后即可使用全局方法 GB.Cache(name)。

<script src="https://cloud.m775.net/js/cache.js"></script>

npm 项目

npm i @gentbo/cache

import '@gentbo/cache';

缓存空间与实例复用

GB.Cache(name) 中的 name 是缓存空间名称,也是对应的 localStorage 主键。请按业务用途命名,例如用户、配置和令牌分别使用独立空间。

GB.Cache('user')保存当前用户的基础信息、界面偏好等数据。
GB.Cache('config')保存应用配置,不会与用户缓存互相覆盖。
GB.Cache('token')创建独立的令牌缓存空间;敏感令牌仍应谨慎保存。
const first = GB.Cache('user');
const second = GB.Cache('user');

console.log(first === second);
// true

有效期规则

涉及持久化的方法都可传入 expiry。未过期的数据会从 localStorage 加载到内存;之后的读取优先使用内存,减少重复解析。

expiry: false只操作当前内存数据,不写入或删除 localStorage。
expiry: -1永久保存,除非主动清理。
expiry: 0删除对应的持久化缓存。
expiry: > 0以秒为单位设置有效期;过期后缓存会自动删除。
// 将用户信息保存 1 小时
GB.Cache('user').set({ name: 'zhoubo' }, 3600);

// 永久保存主题配置
GB.Cache('config').add('theme', 'dark', -1);

读取与写入数据

.get(key?, expiry?)读取全部缓存或指定字段;字段不存在时返回 null。传入 expiry 可在读取时刷新有效期。
.set(data, expiry?)重置整个缓存空间。原有字段会被新对象完全替换。
.add(key, data, expiry?)新增或更新一个字段,适合在保留已有缓存的前提下补充数据。
.expiry(expiry)直接调整当前缓存空间的持久化有效期。
const cache = GB.Cache('user');

cache.set({ id: 1, name: 'zhoubo' }, 3600);
cache.add('token', 'abcdef', 3600);

console.log(cache.get());
// { id: 1, name: 'zhoubo', token: 'abcdef' }

console.log(cache.get('token'));
// abcdef

删除与清空

.delete(key, expiry?)删除指定字段,其余字段保持不变。
.clear()清空当前实例的内存数据,并移除对应的 localStorage 数据。
const cache = GB.Cache('user');

cache.delete('token');
cache.clear();

适合缓存什么

页面状态列表筛选条件、当前标签页、滚动位置或用户的界面偏好。
配置信息主题、语言、壁纸和不频繁变化的应用配置。
接口结果适合短期复用且允许存在一定时效性的接口数据。
临时业务数据跨刷新保留的小型草稿、步骤进度或表单状态。

使用边界

Cache 最终通过 JSON.stringify() 持久化,建议保存 Object、Array、String、Number 和 Boolean 等可序列化数据。函数、DOM 节点和循环引用对象不适合保存。

localStorage 空间由浏览器限制,不应用于大文件、图片、超大 JSON 或高频写入场景。数据可被用户在浏览器中查看,因此不要存储密码、私钥或明文身份认证信息。