采用localStorage做定时缓存
背景
页面采用ajax获取数据时,每访问一次就会发送一次请求向服务端获取数据,可是呢。 有些数据更新的又不频繁,所以我就想着使用localStorage进行本地存储,然后在固定间隔时在去更新数据。(下载地址:https://gitee.com/whnba/data_storage)
结构设计
expires:用于保存数据到期时间
data:用于保存数据
{
expires: "到期时间"
data:"数据"
}
设置缓存数据
采用JSON把数据结构进行序列化保存,如果数据满了就全部清空吧。不然怎么办
static set(key, value, expires = 3600) {
const date = new Date();
try {
localStorage.setItem(key, JSON.stringify({
expires: date.valueOf() + expires * 1000,
data: value
}));
} catch (e) {
if (e.name === 'QuotaExceededError') {
console.log("数据已满,自动清空");
Cache.clear();
Cache.set(key, value, expires);
}
}
}
获取缓存数据
先判断数据是否到期,如果没有到期就返回数据,反之删除。
static get(key) {
const result = JSON.parse(localStorage.getItem(key));
const date = new Date();
if (result && result.expires > date) {
return result.data;
} else {
Cache.remove(key);
return null;
}
}
完整代码
/**
* 数据缓存
*/
class Cache { /**
* 获取缓存
* @param key
* @return {any}
*/
static get(key) {
const result = JSON.parse(localStorage.getItem(key));
const date = new Date();
if (result && result.expires > date) {
return result.data;
} else {
Cache.remove(key);
return null;
}
} /**
* 设置缓存
* @param {String} key 键名
* @param {any} value 缓存数据
* @param {Number} expires 过期时间 单位 s
*/
static set(key, value, expires = 3600) {
const date = new Date();
try {
localStorage.setItem(key, JSON.stringify({
expires: date.valueOf() + expires * 1000,
data: value
}));
} catch (e) {
if (e.name === 'QuotaExceededError') {
console.log("数据已满,自动清空");
Cache.clear();
Cache.set(key, value, expires);
}
}
} /**
* 删除键
* @param key
*/
static remove(key) {
localStorage.removeItem(key);
} /**
* 清空
*/
static clear() {
localStorage.clear();
}
} export default Cache;
采用localStorage做定时缓存的更多相关文章
- localstorage本地定时缓存
在做一个网站时,起初直接就是从服务器获取数据进行交互,没有用一些本地缓存做优化,项目做下来就特别卡,并且对服务器造成了很大的压力,经过请教,查询,找到这样一个定时缓存的例子.html5定时缓存,从数据 ...
- web性能优化之--合理使用http缓存和localStorage做资源缓存
一.前言 开始先扯点别的: 估计很多前端er的同学应该遇到过:在旧项目中添加新的功能模块.或者修改一些静态文件时候,当代码部署到线上之后,需求方验收OK,此时你送了一口气,当你准备开始得意于自己的ma ...
- 面localStorage用作数据缓存的简易封装
面localStorage用作数据缓存的简易封装 最近做了一些前端控件的封装,需要用到数据本地存储,开始采用cookie,发现很容易就超过了cookie的容量限制,于是改用localStorage,但 ...
- 《前端之路》之 Cookie && localStorage && Session Storage 缓存相关
08: Cookie && localStorage && Session Storage 缓存相关 客户端.前端 存储 一. 起 因 首先解释下为什么想来写这个关于前 ...
- Stack Overflow是如何做应用缓存的
首先要说下缓存是什么?缓存,就是在取出数据结果后,暂时将数据存储在某些可以快速存取的位置(例如各种NoSQL如Redis,HBase,又或MemoryCache等等),于是就可以让这些耗时的数据结果多 ...
- spring boot:使用caffeine+redis做二级缓存(spring boot 2.3.1)
一,为什么要使用二级缓存? 我们通常会使用caffeine做本地缓存(或者叫做进程内缓存), 它的优点是速度快,操作方便,缺点是不方便管理,不方便扩展 而通常会使用redis作为分布式缓存, 它的优点 ...
- 怎么用php语言来做文件缓存
使用缓存能够让我们的程序访问起来更加快速,缓存可以减少对数据库的操作,体验起来更好一些,对服务器的压力也小一些,当然服务速度很快 php文件执行完之后产生的解析完的数据,保存成静态的网页,下次打开的这 ...
- .NET WebAPI 采用 IDistributedCache 实现分布式缓存过滤器 Redis 模式
分布式缓存是由多个应用服务器共享的缓存,通常作为访问它的应用服务器的外部服务进行维护. 分布式缓存可以提高 ASP.NET Core 应用的性能和可伸缩性,尤其是当应用由云服务或服务器场托管时. 与其 ...
- 使用redis做mysql缓存
应用Redis实现数据的读写,同时利用队列处理器定时将数据写入mysql. 同时要注意避免冲突,在redis启动时去mysql读取所有表键值存入redis中,往redis写数据时,对redis主键自增 ...
随机推荐
- ArrayAdapter和ListView
利用ArrayAdapter向ListView中添加数据 <?xml version="1.0" encoding="utf-8"?> <Li ...
- [原]Arcgis arcmap修改图元配色
感谢南师大的“深爱”提供的帮助 1.选择识别工具,点击海洋,确定海洋色块的color index为255 2.右键tif选择属性 3.选择分页栏中的符号化(Symbology) 4.找到对应的Labe ...
- 初始化html font-size
(function () { var docEl = document.documentElement, resizeEvt = 'orientationchange' in window ? 'or ...
- Dart接口
/* 和Java一样,dart也有接口,但是和Java还是有区别的. 首先,dart的接口没有interface关键字定义接口,而是普通类或抽象类都可以作为接口被实现. 同样使用implements关 ...
- Python3基础 函数 返回值 利用元组返回多个值
Python : 3.7.3 OS : Ubuntu 18.04.2 LTS IDE : pycharm-community-2019.1.3 ...
- Python - Django - ORM 一对一表结构
当一张表的某一些字段查询的比较频繁,另外一些字段查询的不是特别频繁,可以把不怎么常用的字段 单独拿出来做成一张表,然后用一对一的表关联起来 这样既保证数据都完整的保存下来,又能保证检索更快 model ...
- Python第一阶段01
1.变量: name = "sisi" print(name) age = print(age) 2.常量: PIE = 3.1415926 3.注释: # password = ...
- composer autoload优化
为生产环境作准备 最后提醒一下,在部署代码到生产环境的时候,别忘了优化一下自动加载: composer dump-autoload --optimize 安装包的时候可以同样使用--optimize- ...
- 【JQuery插件】扑克正反面翻牌效果
里面有两个demo,支持X横向和Y纵向翻转两个效果. 对元素的布局有一定的讲究,需要分析一下demo的css. 默认翻转速度为80,不要大于100ms. <!DOCTYPE> <ht ...
- Cas(05)——修改Cas Server的其它配置
修改Cas Server的其它配置 目录 1.1 修改host.name 1.2 修改SSO Session的超时策略 1.3 修改允许管理service的角色 1.4 ...