码迷,mamicode.com
首页 > 系统相关 > 详细

cache 缓存的处理

时间:2018-12-10 22:01:33      阅读:288      评论:0      收藏:0      [点我收藏+]

标签:字符串   value   font   pac   配置   import   turn   存储   creat   

/**
* 数据缓存cache文件
*/

/**
* cache策略
*
* 缓存key相关
* 1. 自定义key
* 2. 通过url相关来判断是否相同key (需要和http请求模块放一起写)
* 1)非严格模式,通过对比url来判断
* 2)严格模式,通过对比url、请求方式、参数来判断是否为相同的key
*
* 缓存数据存储方式方式,强cache还是弱cache
* 1)localstorage、indexDB
* 2) sessionstorage、JS对象
*
* 2. 是否需要设置缓存数据过期时间
* 1) 需要设置缓存时间
* 2) 不需要设置缓存时间 默认为-1,不检测
*
* 3. 缓存前缀,通过前缀区别不同key
*
* 缓存数据格式
* {
* expires: 1504003903042 || -1, // 设置过期时间
* data: value // 源数据
* }
*
*/

import { lstorage, sstorage } from ‘@/utils/storage‘
import { getKey } from ‘@/utils/utils‘

/**
* 缓存构造函数
*/
function Cache (options = {}) {
// 基础配置项
const conf = {
// 可用的缓存过期时间示例
// expires: 60 * 60 * 1000, // 缓存过期时间1小时
// expires: 60 * 1000, // 缓存过期时间1分钟
expires: -1, // 缓存时间设置为 -1,代表不检测缓存时间
prefix: ‘‘, // 缓存key前缀
type: 1 // 1: 强缓存类型, 2: 弱缓存类型
}
// 设置对象属性
this.options = Object.assign(conf, options)
}

/**
* 新创建cache对象
*/
Cache.create = function (options = {}) {
return new Cache(options)
}

/**
* 缓存数据
* key可以是对象字面量,也可以是字符串
* val 需要缓存的值
* options 配置项
*/
Cache.prototype.set = function (key, val, options = {}) {
// 更新配置项
options = Object.assign(this.options, options)

// 拼接前缀,获取cache MD5 key
key = getKey(options.prefix + key)

// 判断用户是否需要设置缓存时间
// 设置缓存时间,则将过期时间持久化,否则持久化-1
if (options.expires !== -1) {
options.expires = new Date().getTime() + options.expires
}

// 构造存储数据结构
val = {
expires: options.expires, // 设置过期时间
data: val // 源数据
}

// 判断存储类型,强缓存(localStorage) || 弱缓存(sessionStorage)存储
options.type === 1 ? lstorage.set(key, val) : sstorage.set(key, val)
}

/**
* 获取缓存信息
*/
Cache.prototype.get = function (key, options = {}) {
// 更新配置项
options = Object.assign(this.options, options)

// 拼接前缀,获取cache MD5 key
key = util.getKey(options.prefix + key)

// 判断数据是否为强缓存类型
let val = options.type === 1 ? lstorage.get(key) : sstorage.get(key)

// 判断存在缓存值,并且未设置缓存时间,(默认缓存值为 -1),返回源数据
if (val && options.expires === -1) return val.data

// 判断存在设置缓存值,(缓存值不为 -1),缓存时间过期则返回false,不过期则返回源数据
if (val && options.expires !== -1 && val.expires > new Date().getTime()) return val.data

// 数据源不存在 || 非设置缓存 || 缓存过期,返回 undefined
return undefined
}

/**
* 删除缓存数据
*/
Cache.prototype.remove = function (key, options = {}) {
// 更新配置项
options = Object.assign(this.options, options)

// 获取cache MD5 key
key = util.getKey(options.prefix + key)

// 判断存储类型,移除强缓存(localStorage) || 弱缓存(sessionStorage)存储
options.type === 1 ? lstorage.remove(key) : sstorage.remove(key)
}

/**
* 更新缓存配置文件
*/
Cache.prototype.config = function (options = {}) {
// 更新配置项
this.options = Object.assign(this.options, options)
}

// 实例化Cache对象
let cache = new Cache()

export {
cache,
Cache
}

cache 缓存的处理

标签:字符串   value   font   pac   配置   import   turn   存储   creat   

原文地址:https://www.cnblogs.com/yayaxuping/p/10099173.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!