当前位置: 首页 > news >正文

HTML5系列(7)-- Web Storage 实战指南

前端技术探索系列:HTML5 Web Storage 实战指南 🗄️

致读者:本地存储的新纪元 👋

前端开发者们,

今天我们将深入探讨 HTML5 中的 Web Storage 技术,这是一个强大的本地存储解决方案,让我们能够更高效地管理网页数据。

localStorage 详解 🚀

基础操作

// 存储数据
localStorage.setItem('username', 'Alice');
localStorage.setItem('preferences', JSON.stringify({theme: 'dark',fontSize: '16px'
}));// 读取数据
const username = localStorage.getItem('username');
const preferences = JSON.parse(localStorage.getItem('preferences'));// 删除数据
localStorage.removeItem('username');// 清空所有数据
localStorage.clear();

生命周期与限制 ⏳

  • 永久存储,除非手动清除
  • 存储限制通常为 5-10 MB
  • 同源策略限制

sessionStorage 应用 🔄

会话级存储

// 存储临时会话数据
sessionStorage.setItem('currentPage', '1');
sessionStorage.setItem('searchHistory', JSON.stringify(['前端开发','HTML5','Web Storage'
]));// 页面刷新后数据仍然存在
const currentPage = sessionStorage.getItem('currentPage');
const searchHistory = JSON.parse(sessionStorage.getItem('searchHistory'));

与 localStorage 的关键区别

// localStorage 示例 - 跨标签页可访问
localStorage.setItem('globalCount', '1');// sessionStorage 示例 - 仅在当前标签页可用
sessionStorage.setItem('tabCount', '1');// 数据持久性测试
function testStoragePersistence() {console.log('localStorage:', localStorage.getItem('globalCount')); // 关闭浏览器后仍存在console.log('sessionStorage:', sessionStorage.getItem('tabCount')); // 关闭标签页后消失
}

数据管理最佳实践 💡

数据序列化

// 存储复杂数据结构
const userSettings = {theme: 'dark',notifications: {email: true,push: false},lastLogin: new Date()
};// 序列化存储
function saveSettings(settings) {try {localStorage.setItem('userSettings', JSON.stringify(settings));return true;} catch (e) {console.error('Storage failed:', e);return false;}
}// 反序列化读取
function loadSettings() {try {const settings = JSON.parse(localStorage.getItem('userSettings'));settings.lastLogin = new Date(settings.lastLogin); // 恢复日期对象return settings;} catch (e) {console.error('Loading failed:', e);return null;}
}

安全性考虑

// 敏感数据加密存储
class SecureStorage {static encrypt(data) {// 实际项目中应使用专业的加密库return btoa(JSON.stringify(data));}static decrypt(data) {try {return JSON.parse(atob(data));} catch (e) {console.error('Decryption failed');return null;}}static save(key, data) {localStorage.setItem(key, this.encrypt(data));}static load(key) {const data = localStorage.getItem(key);return data ? this.decrypt(data) : null;}
}

浏览器兼容性 🌐

特性ChromeFirefoxSafariEdge
localStorage
sessionStorage
存储限制10MB10MB5MB10MB

实战项目:本地数据缓存系统 📦

class CacheManager {constructor(prefix = 'app_cache_') {this.prefix = prefix;this.defaultExpiry = 24 * 60 * 60 * 1000; // 24小时}// 存储带过期时间的数据setItem(key, value, expiryMs = this.defaultExpiry) {const item = {value: value,expiry: Date.now() + expiryMs,created: Date.now()};localStorage.setItem(this.prefix + key, JSON.stringify(item));}// 获取数据,自动处理过期逻辑getItem(key) {const item = localStorage.getItem(this.prefix + key);if (!item) return null;const data = JSON.parse(item);if (Date.now() > data.expiry) {this.removeItem(key);return null;}return data.value;}// 删除数据removeItem(key) {localStorage.removeItem(this.prefix + key);}// 获取所有缓存键getAllKeys() {return Object.keys(localStorage).filter(key => key.startsWith(this.prefix)).map(key => key.slice(this.prefix.length));}// 清理过期数据cleanup() {this.getAllKeys().forEach(key => {this.getItem(key); // 会自动检查和清理过期项});}
}// 使用示例
const cache = new CacheManager();// 存储数据
cache.setItem('user', { id: 1, name: 'Alice' });
cache.setItem('temp', { data: 'temporary' }, 5000); // 5秒后过期// 读取数据
const user = cache.getItem('user');
console.log(user); // { id: 1, name: 'Alice' }// 5秒后
setTimeout(() => {const temp = cache.getItem('temp');console.log(temp); // null(已过期)
}, 6000);

性能优化建议 ⚡

  1. 存储策略

    • 避免存储过大数据
    • 定期清理过期数据
    • 使用前缀避免命名冲突
  2. 序列化优化

    • 压缩大型数据
    • 避免频繁序列化操作
    • 考虑使用专门的序列化库
  3. 错误处理

    • 捕获配额超限异常
    • 实现降级存储方案
    • 监控存储使用情况

调试工具推荐 🛠️

  • Chrome DevTools Application 面板
  • Firefox Storage Inspector
  • Storage Manager API
  • Web Storage Explorer 插件

写在最后 🌟

Web Storage 为现代 Web 应用提供了强大的本地存储能力。合理使用这些特性,可以显著提升应用性能和用户体验!


如果你觉得这篇文章有帮助,欢迎点赞收藏,也期待在评论区看到你的想法和建议!👇

终身学习,共同成长。

咱们下一期见

💻

相关文章:

HTML5系列(7)-- Web Storage 实战指南

前端技术探索系列:HTML5 Web Storage 实战指南 🗄️ 致读者:本地存储的新纪元 👋 前端开发者们, 今天我们将深入探讨 HTML5 中的 Web Storage 技术,这是一个强大的本地存储解决方案,让我们能…...

【在Linux世界中追寻伟大的One Piece】读者写者问题与读写锁

目录 1 -> 读者写者问题 1.1 -> 什么是读者写者问题 1.2 -> 读者写者与生产消费者的区别 1.3 -> 如何理解读者写者问题 2 -> 读写锁 2.1 -> 读写锁接口 3 -> 读者优先(Reader-Preference) 4 -> 写者优先(Writer-Preference) 1 -> 读者写者…...

用到动态库的程序运行过程

当我们写好了一段代码然后编译运行后会生成可执行文件,该文件会存在磁盘的当前目录下,而当我们开始运行这段程序时,操作系统(加载器)需要将其从磁盘加载进内存然后执行相关操作,而对于用到动态库的程序&…...

类型转换与IO流:C++世界的变形与交互之道

文章目录 前言🎄一、类型转换🎈1.1 隐式类型转换🎈1.2 显式类型转换🎁1. C 风格强制类型转换🎁2. C 类型转换操作符 🎈1.3 C 类型转换操作符详解🎁1. static_cast🎁2. dynamic_cast&…...

Pytorch使用手册- TorchVision目标检测微调Tutorial的使用指南(专题十二)

这篇教程的目标是对一个预训练的 Mask R-CNN 模型进行微调,应用于 Penn-Fudan 行人检测与分割数据集。该数据集包含 170 张图像,里面有 345 个行人实例,我们将通过这个教程来演示如何使用 torchvision 中的新特性,训练一个面向自定义数据集的目标检测和实例分割模型。 注意…...

人工智能机器学习算法分类全解析

目录 一、引言 二、机器学习算法分类概述 (一)基于学习方式的分类 1. 监督学习(Supervised Learning) 2. 无监督学习(Unsupervised Learning) 3. 强化学习(Reinforcement Learning&#xf…...

Linux 35.6 + JetPack v5.1.4@DeepStream安装

Linux 35.6 JetPack v5.1.4DeepStream安装 1. 源由2. 步骤Step 1 安装Jetpack 5.1.4 L4T 35.6Step 2 安装依赖组件Step 3 安装librdkafkaStep 4 安装 DeepStream SDKStep 5 测试 deepstream-appStep 6 运行 deepstream-app 3. 总结3.1 版本问题3.2 二进制help 4. 参考资料 1. …...

图数据库 | 11、图数据库架构设计——高性能图存储架构(下)

在上篇内容中,老夫着重讲了高性能图存储系统的特点,咱们继续往下讲重点——高性能存储架构的设计思路!! 2.高性能存储架构设计思路 首先呢,存储架构以及核心数据结构的设计思路通常围绕如下4个维度来进行&#xff1a…...

【HTTP】HTTP协议

一个Web Server就是个服务器软件(程序),或者是运行这个服务器软件的硬件(计算机),其主要功能是通过HTTP协议与客户端进行通信,来接收,存储,处理来自客户端的HTTP请求&…...

大数据新视界 -- Hive 基于 MapReduce 的执行原理(上)(23 / 30)

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...

SpringBoot源码解析(六):打印Banner

SpringBoot源码系列文章 SpringBoot源码解析(一):SpringApplication构造方法 SpringBoot源码解析(二):引导上下文DefaultBootstrapContext SpringBoot源码解析(三):启动开始阶段 SpringBoot源码解析(四):解析应用参数args Sp…...

【计算机网络】实验6:IPV4地址的构造超网及IP数据报

实验 6:IPV4地址的构造超网及IP数据报 一、 实验目的 加深对IPV4地址的构造超网(无分类编制)的了解。 加深对IP数据包的发送和转发流程的了解。 二、 实验环境 • Cisco Packet Tracer 模拟器 三、 实验内容 1、了解IPV4地址的构造超网…...

easy excel 生成excel 文件

导包 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.3.3</version> </dependency> 内容 List<类> limspjreport 值; String fileName sdf.format(new Date()) "-…...

Ajax:回忆与节点

一点回忆 面对我的Ajax学习&#xff0c;实现前后端交互&#xff0c;最开始我采用的使用网络寻找intellij IDEA Ultimate破解方法&#xff0c;然后最终成功&#xff0c;然后按照相关教程配置java ee项目&#xff0c;然后中间又去配置了Tomcat服务器&#xff0c;然后又去学习了一…...

Python+OpenCV系列:Python和OpenCV的结合和发展

PythonOpenCV系列&#xff1a;Python和OpenCV的结合和发展 **引言****Python语言的发展****1.1 Python的诞生与发展****1.2 Python的核心特性与优势****1.3 Python的应用领域** **OpenCV的发展****2.1 OpenCV的起源与发展****2.2 OpenCV的功能特性****2.3 OpenCV的应用场景** *…...

Ubuntu20.04 由源码编译安装opencv3.2 OpenCV

Ubuntu20.04 由源码编译安装opencv3.2.0 获取 opencv 及opencv_contrib源代码 创建目录以存放opencv及opencv_contrib源代码 mkdir ~/opencv3.2.0 cd ~/opencv3.2.0获取opencv源代码并切换到对应tag git clone https://github.com/opencv/opencv.git cd opencv git checkou…...

A058-基于Spring Boot的餐饮管理系统的设计与实现

&#x1f64a;作者简介&#xff1a;在校研究生&#xff0c;拥有计算机专业的研究生开发团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看项目链接获取⬇️&#xff0c;记得注明来意哦~&#x1f339; 赠送计算机毕业设计600个选题ex…...

RDIFramework.NET CS敏捷开发框架 SOA服务三种访问(直连、WCF、WebAPI)方式

1、介绍 在软件开发领域&#xff0c;尤其是企业级应用开发中&#xff0c;灵活性、开放性、可扩展性往往是项目成功的关键因素。对于C/S项目&#xff0c;如何高效地与后端数据库进行交互&#xff0c;以及如何提供多样化的服务访问方式&#xff0c;是开发者需要深入考虑的问题。…...

Linux——命名管道及日志

linux——进程间通信及管道的应用场景-CSDN博客 文章目录 目录 文章目录 前言 一、命名管道是什么&#xff1f; 理解&#xff1a; 2、编写代码 makefile 管道封装成类&#xff0c;想用中管道时只需要调用实例化 读端 写端 日志 1、日志是什么&#xff1f; 2、日志有什么&#x…...

Flink 常见面试题

1、Flink 的四大特征&#xff08;基石&#xff09; checkpoin基于Chandy-Lamport算法实现了分布式一致性快照提供了一致性的语义 state丰富的StateAPI time实现了Watermark机制&#xff0c;乱序数据处理&#xff0c;迟到数据容忍 window开箱即用的滚动&#xff0c;滑动会话窗口…...

从百元平板到AIoT:成本极致化下的电子设计哲学与职业未来

1. 从百元平板之争看电子设计的未来走向那天在门洛帕克的星巴克&#xff0c;Vivek Wadhwa迟到了几分钟&#xff0c;一坐下就带着那种即将沸腾的能量感切入正题&#xff1a;“我最近好像总在惹麻烦&#xff01;”他指的麻烦&#xff0c;是那些关于创新、关于价格、关于行业未来的…...

44《实车CAN总线报文ID含义与数据初步解读》

001、CAN总线基础与实车网络拓扑概述 从一次凌晨三点的“丢帧”说起 去年冬天,某主机厂的新能源车型在做冬季标定。凌晨三点,测试工程师打来电话,语气里带着疲惫和焦躁:“VCU发的车速信号,BMS偶尔收不到,但用CANoe监控又一切正常。”我赶到现场,第一件事不是看代码,而…...

Windows Cleaner:如何系统性地解决Windows磁盘空间管理难题

Windows Cleaner&#xff1a;如何系统性地解决Windows磁盘空间管理难题 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服&#xff01; 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner Windows Cleaner是一款基于Python和PyQt5框…...

SITS2026正式发布倒计时72小时:这4类AI研发团队已紧急升级知识治理体系,你还在用Wiki+钉钉硬扛?

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;AI研发知识管理&#xff1a;SITS2026专题 核心挑战与范式演进 AI研发正从单点模型训练转向全生命周期知识协同——SITS2026&#xff08;Semantic Intelligence & Traceable Systems 2026&#xf…...

文科生被AI替代前,应该主动去碰的一个认证方向

在AI全面渗透职场的当下&#xff0c;文科生想要跳出被动淘汰的困境&#xff0c;无需硬啃编程、算法等硬核理工内容&#xff0c;最优破局方式是依托自身文字、逻辑、共情、场景把控的优势&#xff0c;驾驭AI工具实现能力升级。而目前适配文科生、零门槛、重实操、高认可度的最优…...

参考文献列表(近现代当代中国篇)

参考文献列表&#xff08;近现代当代中国篇&#xff09;0. 无。为什么是空的&#xff1f;——因为鄙视。岐金兰鄙视近现代当代中国绝大多数思想者。不是个人恩怨&#xff0c;不是学术门户&#xff0c;而是对“构建学术实体”这一集体执念的鄙视。他们中的大多数&#xff0c;终其…...

为什么头部AI Lab已全员切换SITS2026?揭秘其内置的4层语义校验引擎与实时可观测性埋点设计

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;AI原生应用CI/CD&#xff1a;SITS2026 AI原生应用正推动软件交付范式发生根本性变革——模型权重、提示工程、评估指标与代码同等重要&#xff0c;传统CI/CD流水线已无法覆盖训练-推理-反馈闭环。SITS2…...

Linux系统编程-makefile文件与make命令的使用

目录 一.makefile文件 1.1什么是makefile 1.2 makefile的一、二、三 1.2.1 一个规则 (1) 两个基本原则&#xff1a; (2) 使用 ALL 来指定makefile的终极目标&#xff1a; 1.2.2 两个函数 (1) src $(wildcard *.c) (2) obj $(patsubst %.c, %.o, $(src)) 1.2.3 三个…...

微博图文视频批量采集软件用户手册

目录 系统介绍 安装与配置 功能使用说明 常见问题 日志查看 系统介绍 本系统是一款微博内容采集与媒体处理工具&#xff0c;主要功能包括&#xff1a; 采集微博内容&#xff08;图文、视频&#xff09; 视频裁剪与去水印 AI标题优化 文件分类保存 自动抽帧 安装与配…...

数据流网络中的能耗与吞吐量优化策略

1. 数据流网络中的能量与吞吐量权衡&#xff1a;原理与挑战在现代信号处理系统中&#xff0c;数据流网络&#xff08;Dataflow Graph, DFG&#xff09;已成为建模并行计算任务的核心框架。这种计算模型将应用程序分解为多个计算节点&#xff08;称为actors&#xff09;和通信通…...