揭秘高效存储和增强用户体验之道-20k级别前端使用LocalStorage的秘密技巧 (常见存储高级技术的原理和实现)
localStorage 和 sessionStorage 是两个在 Web 开发中广泛使用的 API,用于存储键值对。尽管它们使用起来非常方便,但也存在一些规范使用的问题。
规范使用问题
命名过于简单
localStorage 和 sessionStorage 中的键名通常比较简单,这可能会导致不同的项目或应用程序之间出现键名冲突。例如,如果两个项目都使用 "name" 键存储用户姓名,则其中一个项目的 "name" 值可能会被另一个项目覆盖。
缺乏时效性
localStorage 和 sessionStorage中的数据默认情况下是永久存储的。对于某些类型的缓存数据,设置一个特定的时效性非常重要。例如,如果存储一个登录令牌,那么令牌应在一定时间后过期,以提高安全性。
隐秘性差
localStorage 和 sessionStorage 中的数据很容易被用户访问和修改。这可能会在开发或生产环境中造成安全问题。
解决方案
命名规范
为了避免命名冲突,建议使用以下命名约定:项目名+当前环境+项目版本+缓存键名。例如,一个名为 "MyApp" 的项目的 "common" 缓存键名可以命名为 "MyApp_prod_v1_common"。
expire 定时
要为缓存数据设置时效性,可以采用以下策略:将缓存值包装为一个对象,包含一个 "expiredAt" 属性。每次获取缓存值时,检查 "expiredAt" 属性是否已过期。如果已过期,则删除缓存数据。
crypto 加密
为了提高数据的隐秘性,可以对缓存数据进行加密。可以使用 crypto-js 库来实现加密和解密操作。
实践
以下是一个用于规范 localStorage 使用的示例代码片段:
javascript // 创建命名空间 const APP_NAMESPACE = 'MyApp_prod_v1'; // 设置缓存值,并设置 expire 时间 const setCacheValue = (key, value, expireInMs) => { const expireAt = new Date().getTime() + expireInMs; const cacheObj = { value, expiredAt: expireAt, }; localStorage.setItem(`${APP_NAMESPACE}_${key}`, JSON.stringify(cacheObj)); }; // 获取缓存值,并检查是否过期 const getCacheValue = (key) => { const cacheObj = JSON.parse(localStorage.getItem(`${APP_NAMESPACE}_${key}`)); if (!cacheObj) { return null; } if (cacheObj.expiredAt < new Date().getTime()) { localStorage.removeItem(`${APP_NAMESPACE}_${key}`); return null; } return cacheObj.value; };
结语
规范使用 localStorage 和 sessionStorage 不仅可以提高代码的可维护性和可读性,还可以改善安全性。通过遵循上述最佳实践,开发人员可以构建更强大、更安全的 Web 应用程序。
html5几种在客户端存储数据的实例详解
LocalStorage LocalStorage用于持久化的本地存储,存储资料在客户端(client)的浏览器上,除非主动删除数据,否则数 据是永远不会过期的。 LocalStorage使用键值对的方式进行存储,存储的方式只能是字符串。 存储内容可以有图片、json、样式、脚本等只要可以序列化为字符串的。 2 . SessionStorageSessionStorage用于本地存储一个会话中 的数据,这些数据只有在同一个会话中的页面才能访问并且会话结束,例如关闭窗口后,,数据也会随之被销毁。 它是一种会话级别的存储。 SessionStorage的使用方法与localstorage的使用方法相似。 3. 离线缓存(application cache)HTML5引入了应用程序缓存器,可对web进行缓存,在没有网络形况下使用,通过创建cache manifest文件,创建应用缓存。
Spark中cache和persist的区别
cache只有一个默认的缓存级别MEMORY_ONLY ,而persist可以根据情况设置其它的缓存级别。
免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。