今日热闻!【前端方案】-表格排序列LRU缓存方案

2023-06-07 18:51:07 来源:博客园 分享到:


(资料图片)

目标:排序后的表格列,页面刷新或者用户重新登录后,能够保持之前的操作排序

完成效果:

解决方案:利用localstorage对排序后的表格列属性进行存储,页面刷新或者用户重新进入该页面时都先从localstorage中读取1.存储方式:localstorage(key,value)key - 表格增加配置属性tableHeaderKey,以当前路由的path+tableHeaderKey来做keyvalue - 排序后的属性列数组(defaultKeys-所有属性列key,selectedKeys要显示的key,tableSize表格高度)只存key,减少存储空间2.存储时机:配置有tableHeaderKey并且showTableSetting开启,进入页面就读取,没有则先存一份3.移除或新增列的情况:(1)在后续需求迭代中,以前表格的字段列可能会增加或者减少,需要将新的字段列和localstorage中的旧有字段列进行diff,如果存在删除的字段,则移除,存在新增字段则自动追加。(2)或者强制更新,通过读取发版的版本号,如果发版的版本号大于旧的版本号,则清空localstorage。升级方案:针对localstorage缓存太多的情况,会采用LRU算法对缓存进行优化。LRU全称为Least Recently Used,即最近使用的。针对的是在有限的内存空间内,只缓存最近使用的数据(即get和set的数据),超过有限内存空间的数据将会被删除。大致思路:

简单实现思路

class LRUCache {    data = new Map(); // 数据map    constructor(length) {    if (length < 1) throw new Error("长度不能小于1")        this.length = length    }    set(key, value) {        const data = this.data;        // 如果存在该对象,则直接删除        if (data.has(key)) {            data.delete(key);        }        // 将数据对象添加到map中        data.set(key, value);        if (data.size > this.length) {            // 如果map长度超过最大值,则取出map中的第一个元素,然后删除            const delKey = data.keys().next().value            data.delete(delKey);        }    }    get(key) {        const data = this.data;        // 数据map中没有key对应的数据,则返回null        if (!data.has(key)) return null;        const value = data.get(key);        // 返回数据前,先删除原数据,然后在添加,就可以保持在最新        data.delete(key);        data.set(key, value);        return value;    }}const lruCache = new LRUCache(2);lruCache.set("1", 1); // Map(1) {1 => 1}lruCache.set("2",2); // Map(2) {1 => 1, 2 => 2}console.log(lruCache.get("1")); // Map(2) {2 => 2, 1 => 1}lruCache.set("3",3); // Map(2) {1 => 1, 3 => 3}console.log(lruCache.get("2")); // nulllruCache.set("4",4); // Map(2) {3 => 3, 4 => 4}console.log(lruCache.get("1")); // nullconsole.log(lruCache.get("3")); // Map(2) {4 => 4, 3 => 3}console.log(lruCache.get("4")); // Map(2) {3 => 3, 4 => 4}

map结合localstorage实现存储操作用例

let contacts = new Map()contacts.set("Jessie", {phone: "213-555-1234", address: "123 N 1st Ave"})contacts.set("Hilary22",333) // undefinedcontacts.set("Hilary", {phone: "617-555-4321", address: "321 S 2nd St"})//contacts.get("Jessie") // {phone: "213-555-1234", address: "123 N 1st Ave"}console.log(contacts)console.log(JSON.stringify(Array.from(contacts.entries())))window.localStorage.setItem("test",JSON.stringify(Array.from(contacts.entries())))//console.log(new Map(JSON.parse(window.localStorage.getItem("test"))))contacts = new Map(JSON.parse(window.localStorage.getItem("test")))onsole.log( contacts  )

封装storage

export default {  setItem(key, item) {    let stringifyItem;    try {      stringifyItem = JSON.stringify(item);    } catch (error) {      stringifyItem = "";    } finally {      window.localStorage.setItem(key, stringifyItem);    }  },  getItem(key) {    let item;    try {      const stringifyItem = window.localStorage.getItem(key);      item = JSON.parse(stringifyItem);    } catch (erorr) {      item = null;    }    return item;  },  removeItem(key) {    window.localStorage.removeItem(key);  },};

后续升级达到一定量级,如果要做针对用户层面的表格列操作缓存,会考虑结合后端存储使用indexDb存储方式,支持G级别大小。

标签:

今日热闻!【前端方案】-表格排序列LRU缓存方案

来源:博客园 2023-06-07 18:51:07

全球关注:波音公司回应787飞机发现问题:影响近期交付

来源:中国新闻网 2023-06-07 17:54:52

法伊洛(法伊)

来源: 2023-06-07 17:14:21

到退休年龄后何时能领退休金?办理退休审核怎么办?-环球热头条

来源:律法网 2023-06-07 16:19:18

太平年金险有必要买吗?好处有哪些? 世界讯息

来源:马蜂保 2023-06-07 15:51:37

今日最新!高银金融(00530):呈请聆讯已押后至7月21日

来源:智通财经 2023-06-07 15:50:06

世界快讯:​图知道|2023高考作文你想写哪篇

来源:中国青年报客户端 2023-06-07 14:54:21

暗黑4觅血者的威能介绍|世界热文

来源:网络 2023-06-07 14:25:54

2023《支付宝》蚂蚁庄园6月8日每日一题答案(2)

来源:游戏窝 2023-06-07 13:50:37

联动科技:6月6日融资买入2182.02万元,融资融券余额8798.51万元

来源:证券之星 2023-06-07 12:42:29

即时看!国足最新一期大名单:艾克森武磊领衔 韦世豪徐新入选

来源:射门中国 2023-06-07 11:42:33

城市治理深入背街小巷!北京胡同的这些变化,居民有话说_今日看点

来源:北京日报 2023-06-07 09:48:49

最资讯丨我想看王守仁_我王守真就爱看这个什么意思弹幕王守真的梗是怎么来的啊

来源:互联网 2023-06-07 09:07:09

卓越新能获4家机构调研:公司烃基生物柴油项目可望在二季度末开工(附调研问答)|当前速看

来源:同花顺iNews 2023-06-07 08:29:39

东湖评论:将自然教育全方位融入中小学科学教育

来源:荆楚网 ​(湖北日报网) 2023-06-07 08:00:07

世界快播:重庆铜梁萝卜首次“鲜”销海外发货越南

来源:中国新闻网 2023-06-07 07:20:56

国内商品期货夜盘涨跌互现玻璃、豆一涨超1%

来源:和讯刘海美 2023-06-07 06:43:20

为促进学生全面发展 今年将启动基础教育课程教学深化改革 时讯

来源:央视网 2023-06-07 06:21:40

快看:安德烈·克鲁尔

来源:互联网 2023-06-07 05:44:20

后来居上的意思_后来居上

来源:互联网 2023-06-07 05:10:15

当前报道:IPO降温,再融资升温!IPO募资大降四成,这5家投行IPO超100亿

来源:券商中国 2023-06-07 03:31:48

全球讯息:网上竞标平台_竞标网

来源:元宇宙网 2023-06-07 02:47:20

世界观察:不必苛责年轻人,上香也是一种上进

来源:顶端新闻 2023-06-07 02:30:01

暨这个词怎么用_暨是什么意思该怎么用

来源:元宇宙网 2023-06-07 02:08:48

热讯:长三角三省一市共推区域文旅建设消费复苏振兴

来源:中国新闻网 2023-06-07 01:36:00

世体:巴萨财务计划已获西甲批准,可注册球员和引进新球员_环球观速讯

来源:直播吧 2023-06-07 00:48:45

vip购票须知_vip购-天天百事通

来源:互联网 2023-06-07 00:15:50

“高考天气地图”来了!考生还有这些需注意……

来源:环球网 2023-06-06 23:46:53

大悦城:商办项目中三亚大悦中心二期、深圳福田大悦广场将有新货推出_每日快看

来源:界面新闻 2023-06-06 23:26:46

世界快播:“北京正变得咄咄逼人”?外交部驳斥

来源:中财网 2023-06-06 23:02:35

Copyright   2015-2022 西方知识产权网 版权所有  备案号:沪ICP备2020036824号-7   联系邮箱:5 626 629 @qq.com