上述代码通过惰性删除已经实现了可过期的localStorage缓存,但是也有比较明显的缺点:如果一个key一直没有被用到,即使它已经过期了也永远存放在localStorage。为了弥补这样缺点,我们引入另一种清理过期缓存的策略。

定时删除

定时删除是指,每隔一段时间执行一次删除操作,并通过限制删除操作执行的次数和频率,来减少删除操作对CPU的长期占用。另一方面定时删除也有效的减少了因惰性删除带来的对localStorage空间的浪费。

每隔一秒执行一次定时删除,操作如下:

  1. 随机测试20个设置了过期时间的key。

  2. 删除所有发现的已过期的key。

  3. 若删除的key超过5个则重复步骤1,直至重复500次。

具体实现如下:

var lsc = (function (self) {

var prefix = ‘one_more_lsc_’

var list = [];

//初始化list

self.init = function () {

var keys = Object.keys(localStorage);

var reg = new RegExp(‘^’ + prefix);

var temp = [];

//遍历所有localStorage中的所有key

for (var i = 0; i < keys.length; i++) {

//找出可过期缓存的key

if (reg.test(keys[i])) {

temp.push(keys[i]);

}

}

list = temp;

};

self.init();

self.check = function () {

if (!list || list.length == 0) {

return;

}

var checkCount = 0;

while (checkCount < 500) {

var expireCount = 0;

//随机测试20个设置了过期时间的key

for (var i = 0; i < 20; i++) {

if (list.length == 0) {

break;

}

var index = Math.floor(Math.random() * list.length);

var key = list[index];

var val = localStorage.getItem(list[index]);

//从list中删除被惰性删除的key

if (!val) {

list.splice(index, 1);

expireCount++;

continue;

}

val = JSON.parse(val);

//删除所有发现的已过期的key

if (val.expires < new Date().getTime()) {

list.splice(index, 1);

localStorage.removeItem(key);

expireCount++;

}

}

//若删除的key不超过5个则跳出循环

if (expireCount <= 5 || list.length == 0) {

break;

}

checkCount++;

}

}

//每隔一秒执行一次定时删除

window.setInterval(self.check, 1000);

return self;

}(lsc || {}));

完整源码及使用示例

完整源码及使用示例已上传到我的GitHub(https://github.com/heihaozi/LocalStorageCache)上,感谢各位小伙伴的Star和Fork。

总结

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
img

最近我根据上述的技术体系图搜集了几十套腾讯、头条、阿里、美团等公司21年的面试题,把技术点整理成了视频(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

[外链图片转存中…(img-Qb6nMlAm-1712764109904)]

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-SCOKxlN5-1712764109905)]

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐