前端Cache工具
前端经常碰到需要缓存一些方法的情况(比如接口,wx.login等),有些情况下,数据还需要落地(localStorage,wx的本地缓存等)。
安装
npm i cache-in-storage
快速使用
import { cacheDec } from "cache-in-storage";
const getTimeSpan = async (isError = false) => {
return new Promise((resolve, _reject) => {
setTimeout(() => {
if (isError) {
return _reject(new Error("test"));
}
resolve(Date.now());
}, 200);
});
};
const getTimeSpanWithCache = cacheDec(getTimeSpan, "keyInCache", { cache:true }, localStorage);
getTimeSpanWithCache().then(console.log);
getTimeSpanWithCache().then(console.log);
getTimeSpanWithCache(true).catch(console.error);
API
cacheDec: (func: (...args: any[]) => Promise<any>, key: string, settings: CacheOptionModel, storage?: CacheNStorage, promiseStorage?: CacheNStorage): (...args: any[]) => Promise<any>
一个高阶函数,包装一个Promise方法,返回一个方法((...args)=>Promise);
参数说明
参数名 | 类型 | 说明 |
---|
func | (...args)=>Promise | 需要包装缓存的方法 |
key | String | 缓存的key值 |
storage | CacheNStorage | 缓存的类 |
settings | CacheOptionModel | 缓存设置 |
getCacheInWithKey: getCacheInWithKey = (key: string, storage?: Storage): number
返回key值在进入缓存的时间戳,如果不存在键值则返回0。
参数名 | 类型 | 说明 |
---|
key | String | 缓存的key值 |
storage | CacheNStorage | 缓存的类 |
getDataFromStorage: (key: string, storage: Storage): CacheDataModel | null
从缓存类中获取数据,如果不存在缓存,则返回null。
参数名 | 类型 | 说明 |
---|
key | String | 缓存的key值 |
storage | CacheNStorage | 缓存的类 |
removeCacheFromKey: (key: string, storage: CacheNStorage): void
从缓存类中删除一个键值。
参数名 | 类型 | 说明 |
---|
key | String | 缓存的key值 |
storage | CacheNStorage | 缓存的类 |
removeCacheFromRegexp: (regexp: RegExp, storage: CacheNStorage): void
根据正则匹配,从缓存类中删除匹配的键值。
参数名 | 类型 | 说明 |
---|
key | String | 缓存的key值 |
storage | CacheNStorage | 缓存的类 |
BaseFactory
继承自CacheNStorage接口,提供了操作缓存的方法。此类的数据缓存在内存中。需要扩展一个forEach方法。
export interface CacheNStorage extends Storage {
forEach(fn: (key: string, val: any) => void): void;
}
interface Storage {
readonly length: number;
clear(): void;
getItem(key: string): string | null;
key(index: number): string | null;
removeItem(key: string): void;
setItem(key: string, value: string): void;
[name: string]: any;
}
LruFactory
继承自BaseStorage接口,提供了操作缓存的方法并支持lru缓存算法。此类的数据缓存在内存中。
类型说明
CacheOptionModel
参数名 | 类型 | 说明 |
---|
cache | boolean | 缓存开关 |
reload | boolean | 重刷缓存开关 |
expire | boolean | 过期时间(单位毫秒) |
changelog
V2.0.0
- 修改了promise缓存的机制,添加了缓存lru算法
V1.0.1
- 默认导出了内存factory
LICENSE
MIT