上周我们开始开发一款简易版的的底图开发工具BaseMap,就临时数据存储我们做了做了一些优化。
我们这个工具目前没有开发临时的后台,所以只能借用webStorage或者浏览器IndexDB类似的方案,比如容易想到的是webStorage分为sessionStorage和localStorage:
跟我业务需求来讲,底图工具的历史缓存是一个重要功能,但是对于缓存数据的数量来讲不需要很多,仅限制于个人绘制的主动存储。
所以我们选择了localStorage实现我们的历史缓存功能,5M大小完全满足我们的需求。
实现缓存的所以功能点:
window.beforeunload()
事件100
条数据,超过会自动移除最早存储数据(测试存储200条数据缓存)今天用户在使用的时候出现了现场bug,浏览器存储出现:
问题分析:
全部删除
功能目前不够实用,现场每个页面节点数在500+,一般不可能实用全部删除功能清除已经摆放的控件思路:我们的存储功能是现场已经使用并且经常使用到的功能,出现问题是因为我们的交互和容错处理没有优化,我们可以通过判断当前localStorage大小提供判断已经,提供更加友好的提示功能。
encodeURIComponent(JSON.stringify(localStorage)).length
;
1024 \* 1024 \* 5 - unescape(encodeURIComponent(JSON.stringify(localStorage))).length
问题处理:
后续处理:localStorage仅是一个数据缓存的临时性方法,除了不能解决大数据存储的问题,也不能处理多浏览器多账号多设备的数据共享和数据持久化问题,如果要彻底解决这个问题,后续需要重构成后台存储的一劳永逸的完整方案。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。