Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用前端缓存LocalSotorage导致的现场Bug

使用前端缓存LocalSotorage导致的现场Bug

原创
作者头像
伯爵
修改于 2020-05-18 03:21:14
修改于 2020-05-18 03:21:14
8580
举报
文章被收录于专栏:前端小菜鸟前端小菜鸟

上周我们开始开发一款简易版的的底图开发工具BaseMap,就临时数据存储我们做了做了一些优化。

我们这个工具目前没有开发临时的后台,所以只能借用webStorage或者浏览器IndexDB类似的方案,比如容易想到的是webStorage分为sessionStorage和localStorage:

  • sessionStorage:生命周期为当前窗口或者标签,不同浏览器窗口不能共享,浏览器关闭缓存删除
  • localStorage:可以在相同浏览器同域标签下共享数据,浏览器关闭数据依然持久化存在

跟我业务需求来讲,底图工具的历史缓存是一个重要功能,但是对于缓存数据的数量来讲不需要很多,仅限制于个人绘制的主动存储。

所以我们选择了localStorage实现我们的历史缓存功能,5M大小完全满足我们的需求。

实现缓存的所以功能点:

  • 用户可以手动点击保存主动缓存
  • 当标签关闭/刷新页面会自动存储,侦听window.beforeunload()事件
  • 当前页面为空不会缓存
  • 当我们查看历史缓存的时候,可以重新应用缓存对象
  • 缓存状态提示
  • 设置了缓存数据数目,自动存储和用户存储各 100条数据,超过会自动移除最早存储数据(测试存储200条数据缓存
  • 删除全部缓存

今天用户在使用的时候出现了现场bug,浏览器存储出现:

问题分析:

  • 浏览器分配给localStorage大小不够新的数据存储
  • 自动存储一些不重要的页面数据加速了localStorage的占用
  • 全部删除功能目前不够实用,现场每个页面节点数在500+,一般不可能实用全部删除功能清除已经摆放的控件
  • 自测阶段节点数较少导致问题被掩盖

思路:我们的存储功能是现场已经使用并且经常使用到的功能,出现问题是因为我们的交互和容错处理没有优化,我们可以通过判断当前localStorage大小提供判断已经,提供更加友好的提示功能。

  • 当前对象的大小:

encodeURIComponent(JSON.stringify(localStorage)).length;

  • localStorage剩余大小:

1024 \* 1024 \* 5 - unescape(encodeURIComponent(JSON.stringify(localStorage))).length

问题处理:

  • 根据localStorage(我们使用Chrome)的占用判断,提示保存状态
  • 增加根据下标删除单条历史数据的功能
  • 删除自动存储功能,减少无用数据,但是保留旧的数据字段,容错线程已经存储在自动存储的数据
  • 页面刷新或者离开,增添提示保存功能

后续处理:localStorage仅是一个数据缓存的临时性方法,除了不能解决大数据存储的问题,也不能处理多浏览器多账号多设备的数据共享和数据持久化问题,如果要彻底解决这个问题,后续需要重构成后台存储的一劳永逸的完整方案。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
vue之Cookie
Cookie的使用必须基于web服务器,因为Cookie的操作会跟随http请求进行。 Cookie,有时也用其复数形式 Cookies。类型为“小型文本文件”,是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息。 Cookie 并不是它的原意“甜饼”的意思,而是一个保存在客户机中的简单的文本文件,这个文件与特定的 Web 文档关联在一起,保存了该客户机访问这个Web 文档时的信息,当客户机再次访问这个 Web 文档时这些信息可供该文档使用。由于“Cookie”具有可以保存在客户机上的神奇特性,因此它可以帮助我们实现记录用户个人信息的功能,而这一切都不必使用复杂的CGI等程序 。 举例来说,一个 Web 站点可能会为每一个访问者产生一个唯一的ID,然后以 Cookie 文件的形式保存在每个用户的机器上。如果使用浏览器访问 Web,会看到所有保存在硬盘上的 Cookie。在这个文件夹里每一个文件都是一个由“名/值”对组成的文本文件,另外还有一个文件保存有所有对应的 Web 站点的信息。在这里的每个 Cookie 文件都是一个简单而又普通的文本文件。透过文件名,就可以看到是哪个 Web 站点在机器上放置了Cookie(当然站点信息在文件里也有保存) 。 Cookie是一段不超过4KB的小型文本数据,由一个名称(Name)、一个值(Value)和其它几个用于控制Cookie有效期、安全性、使用范围的可选属性组成。
张哥编程
2024/12/13
1180
vue之Cookie
SessionStorage、LocalStorage详解
作为Web开发人员,在 Web浏览器中存储数据以改善用户体验和提升Web应用程序性能是非常常见的。在大多数情况下,可供我们使用就是LocalStorage和SessionStorage。
葡萄城控件
2020/10/26
1.6K0
彻底弄清楚session,cookie,sessionStorage,localStorage的区别及应用场景(面试向)
    客户端状态保持是一个老生常谈的问题了,归根结底追踪浏览器的用户身份及其相关数据无非就是以下四种方式:session,cookie,sessionStorage,localStorage
用户9127725
2022/08/08
6540
2019-08-23
1、console.log(["1", "3", "10"].map(parseInt))输出什么 答案:[ 1, NaN, 2 ] 解答:
杨肆月
2019/08/23
4290
2019-08-23
前端数据缓存 & 版本管理方案总结
越来越多的大型项目趋于 web 化,在浏览器中运行交互复杂的大型项目时,若每步交互都向后端提交 ajax 请求,除了增加服务器的负担外,等待相应的延迟也会降低用户体验。在前端项目中,使用 localstorage 进行数据缓存已是司空见惯的做法,但由于数据分布式地存储在多个前端浏览器中,因此数据的版本管理终究是绕不开的话题。
CS逍遥剑仙
2021/05/17
2.9K0
前端数据缓存 & 版本管理方案总结
前端存储除了 localStorage 还有啥
❝ 本文介绍一些与前端数据存储有关,「有趣、好玩、有用」的开源库。除此之外,还会让你掌握各种 Web 存储方案的特点,赶紧来了解一下。 ❞
阿宝哥
2020/06/18
2.5K0
前端存储除了 localStorage 还有啥
测试开发必备!webStorage 浏览器本地存储数据(附项目实战案例!)
前期分享的 200行纯前端Vue代码!教你写一个专属TodoList【零基础友好】
Wu_Candy
2022/07/05
5670
【JS】1693- 重学 JavaScript API - Web Storage API
在 Web 开发中经常需要在客户端保存和获取数据,Web Storage API 提供了一种在浏览器中存储和检索数据的机制,它允许开发者在用户的本地浏览器中存储数据。本文将介绍 Web Storage API 的概念、用途以及如何使用它来存储和检索数据。
pingan8787
2023/09/01
4210
【JS】1693- 重学 JavaScript API - Web Storage API
前端必学必会-多媒体-本地存储-浏览器与服务器的交互-通信功能
学习元素的知识点,涉及属性,方法,事件。在HTML5出现前,展示视频,音频,动画等,都是使用第三方自主开发,使用最多的工具是flash了。
达达前端
2020/03/20
2.3K0
前端必学必会-多媒体-本地存储-浏览器与服务器的交互-通信功能
vue2知识点:浏览器本地缓存
<font color='red'>浏览器本地缓存实际是js的知识点,这里只是提一下加深下印象</font>
刘大猫
2024/10/27
1090
前端|HTML5中的网络存储
随着互联网的快速发展,基于网页的应用越来越普遍,同时也变得越来越复杂,为了满足日益更新的需求,会经常性的在本地设备上存储数据,例如记录历史活动信息。传统方式使用document.cookie来进行存储,但是由于其存储的空间只有4KB左右,并且需要复杂的操作进行解析,给发开者带来很多不便,为此,HTML5规范提出了网络存储的解决方案。
算法与编程之美
2020/04/27
1.4K0
都2022年了你还不知道Stronge本地存储么
前言:我们这篇主要是说JavaScript的本地存储web Storage,首先我们需要了解一下客户端存储的几种方式。
大熊G
2022/11/18
6750
都2022年了你还不知道Stronge本地存储么
H5学习之路之Web存储解决方案
我们所说的H5的存储方案指的是客户端的数据存储,这点需要明白,那么在这个之前有么有可用的存储方案呢?当然是有的,之前一直用的CooKie,如果有人看过我之前写的关于客户端存储的文章, 这里就很好理解了,我之前说过cookie的弊端和优势。那么今天我们说的是H5才提出的存储方案:localStorage和sessionStorage
何处锦绣不灰堆
2020/05/29
7390
第139天:详解cookie、 sessionStorage 和localStorage
1.cookie:存储在用户本地终端上的数据。有时也用cookies,指某些网站为了辨别用户身份,进行session跟踪而存储在本地终端上的数据,通常经过加密。一般应用最典型的案列就是判断注册用户是否已经登过该网站。
半指温柔乐
2018/09/11
6380
localStorage和sessionStorage本地存储
使用HTML5中的Web Storage API, 可以在客户端存储更多的数据,,可以实现数据在多个页面中共享甚至是同步,对于复杂的数据,可以使用 Web SQL Database API 来实现。
达达前端
2021/02/04
2.1K0
js---- localStorage的基本用法
容量大小约为20M左右, 存储的数据不会随着用户浏览时会话过期而过期,但会应用户的请求而删除。
小蔚
2019/09/11
2.1K0
深入了解浏览器存储
随着移动网络的发展与演化,我们手机上现在除了有原生 App,还能跑“WebApp”——它即开即用,用完即走。一个优秀的 WebApp 甚至可以拥有和原生 App 媲美的功能和体验。WebApp 优异的性能表现,有一部分原因要归功于浏览器存储技术的提升。cookie存储数据的功能已经很难满足开发所需,逐渐被WebStorage、IndexedDB所取代,本文将介绍这几种存储方式的差异和优缺点。
Bug开发工程师
2019/05/05
8830
深入了解浏览器存储
【Vuejs】总结- Vue 存储插件的底层原理,你不知道的 localStorage API
当谈到 Web 应用的客户端存储时,localStorage API 脱颖而出,它允许开发者直接在浏览器中存储键值对。
pingan8787
2024/05/30
2550
【Vuejs】总结- Vue 存储插件的底层原理,你不知道的 localStorage API
localStorage 的相关运用
localStorage 是浏览器自带的一个属性,只读的localStorage 属性允许你访问一个Document 源(origin)的对象 Storage;存储的数据将保存在浏览器会话中。localStorage 类似 sessionStorage,但其区别在于:存储在 localStorage 的数据可以长期保留;而当页面会话结束——也就是说,当页面被关闭时,存储在 sessionStorage 的数据会被清除。
子舒
2023/08/23
2910
localStorage 的相关运用
Cookie, Session, Token,WebStorage你懂多少?
最近遇见一个好玩的bug, 现象是页面刷新白屏,RootCause是Header里放的cookie太多了, 大小超出了4kb的限制.
Criss@陈磊
2019/09/17
8740
Cookie, Session, Token,WebStorage你懂多少?
相关推荐
vue之Cookie
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档