【JS】1693- 重学 JavaScript API - Web Storage API

news2024/12/22 16:48:59

3b0214bb3bbddd52e8ef46a088bdf93d.jpeg

前期回顾:

1. Page Visibility API

2. Broadcast Channel API

3. Beacon API

4. Resize Observer API

5. Clipboard API

6. Fetch API

7. Performance API

在 Web 开发中经常需要在客户端保存和获取数据,Web Storage API 提供了一种在浏览器中存储和检索数据的机制,它允许开发者在用户的本地浏览器中存储数据。本文将介绍 Web Storage API 的概念、用途以及如何使用它来存储和检索数据。

🏝 1. 什么是 Web Storage API

1.1 概念介绍

Web Storage API 包含两组常用方法:localStoragesessionStorage。这些方法允许开发者在浏览器中保存和获取数据。

  • localStorage

用于「持久性存储数据」,数据会一直保留在用户的浏览器中,即使用户关闭了浏览器或重新启动设备。

  • sessionStorage

用于「临时存储数据」,数据仅在当前会话期间有效。当用户关闭浏览器标签页或浏览器窗口时,数据将被删除。

1.2 作用和使用场景

Web Storage API 具有许多使用场景,比如:

  • 保存用户的首选项和设置

  • 缓存数据以提高应用程序的性能

  • 在不同页面之间共享数据

  • 实现离线应用程序

🎨 2. 如何使用 Web Storage API

要使用 Web Storage API,步骤如下:

  1. 通过 localStoragesessionStorage 对象访问 API;

  2. 使用 setItem(key, value) 方法将键值对数据存储到 Web Storage 中;

  3. 使用 getItem(key) 方法获取特定键的值;

  4. 使用 removeItem(key) 方法删除指定键的数据;

  5. 使用 clear() 方法清空整个 Web Storage 中 的数据。

以下是一个简单的示例代码,演示如何使用 Web Storage API 存储和检索数据:

// 存储数据
localStorage.setItem("username", "Chirs1993");
localStorage.setItem("email", "Chirs1993@example.com");

// 获取数据
const username = localStorage.getItem("username");
const email = localStorage.getItem("email");

console.log(username); // 输出: Chirs1993
console.log(email); // 输出: Chirs1993@example.com

🧭 3. 实际应用

以下介绍 5 个实际应用场景:

3.1 保存用户首选项和设置

Web Storage API 是保存用户首选项和设置的理想选择。通过将用户的偏好保存在本地浏览器中,可以提供更好的用户体验,并在用户下次访问网站时恢复其个性化设置。

// 存储用户首选项
localStorage.setItem("theme", "dark");
localStorage.setItem("fontSize", "16px");

// 获取用户首选项
const theme = localStorage.getItem("theme");
const fontSize = localStorage.getItem("fontSize");

3.2 缓存数据以提高应用程序性能

通过将频繁使用的数据缓存到本地存储中,可以减少对服务器的请求,提高应用程序的性能和响应速度。

// 检查本地存储中是否有缓存的数据
if (localStorage.getItem("cachedData")) {
  // 从本地存储中获取缓存数据
  const data = JSON.parse(localStorage.getItem("cachedData"));
  // 使用缓存数据
  // ...
} else {
  // 从服务器获取数据
  // ...
  // 将数据存储到本地存储中
  localStorage.setItem("cachedData", JSON.stringify(data));
}

3.3 在不同页面之间共享数据

Web Storage API 允许在同一浏览器的不同页面之间共享数据。这对于需要在多个页面中传递信息或共享状态的应用程序非常有用。 在页面 A 中设置共享数据:

localStorage.setItem("sharedData", "Hello, World!");

在页面 B 中获取共享数据:

const sharedData = localStorage.getItem("sharedData");
console.log(sharedData); // 输出: "Hello, World!"

3.4 存储表单数据

使用 Web Storage API 可以方便地存储和获取表单数据,从而实现表单数据的自动填充或恢复功能。

<input type="text" id="username" placeholder="Username" />
<input type="password" id="password" placeholder="Password" />

<button id="saveBtn">Save</button>
<button id="loadBtn">Load</button>
const saveBtn = document.getElementById("saveBtn");
const loadBtn = document.getElementById("loadBtn");
const usernameInput = document.getElementById("username");
const passwordInput = document.getElementById("password");

// 保存表单数据
saveBtn.addEventListener("click", () => {
  localStorage.setItem("username", usernameInput.value);
  localStorage.setItem("password", passwordInput.value);
});

// 加载表单数据
loadBtn.addEventListener("click", () => {
  usernameInput.value = localStorage.getItem("username");
  passwordInput.value = localStorage.getItem("password");
});

3.5 记住用户登录状态

Web Storage API 可以用于记住用户的登录状态,以便用户在关闭浏览器后再次访问网站时保持登录状态。

// 用户登录成功后,将登录状态存储到本地存储中
localStorage.setItem("isLoggedIn", "true");

// 检查本地存储中是否存在登录状态
const isLoggedIn = localStorage.getItem("isLoggedIn");

// 根据登录状态执行相应的操作
if (isLoggedIn === "true") {
  // 用户已登录,执行相应逻辑
  // ...
} else {
  // 用户未登录,执行相应逻辑
  // ...
}

在上述示例中,当用户登录成功后,我们将登录状态设置为 'true' 并存储在本地存储中。每次用户访问网站时,我们从本地存储中获取登录状态,并根据登录状态执行相应的操作。

📋 4. 兼容性和优缺点

4.1 兼容性

以下是 Web Storage API 在不同浏览器中的兼容性信息:

  • Chrome:4+ ✅

  • Firefox:3.5+ ✅

  • Safari:4+ ✅

  • Internet Explorer:8+ ✅

  • Edge:12+ ✅

  • Opera:10.50+ ✅

  • iOS Safari:3.2+ ✅

  • Android Browser:2.1+ ✅

  • Chrome for Android:18+ ✅

672b46c48cf49d31fbf2349ec7985c50.png

你也可以通过Can I use Web Storage[1]网站了解详细情况。

4.2 优缺点

Web Storage API 具有以下优点:

  • 「简单易用」:使用起来非常简单,只需几行代码就可以存储和检索数据。

  • 「持久性存储」:使用 localStorage 可以永久保存数据,即使用户关闭了浏览器。

  • 「大容量」:Web Storage 提供较大的存储容量,通常在几兆字节左右。

然而,Web Storage API 也有一些限制和缺点:

  • 「仅限于字符串存储」:Web Storage API 只能存储字符串类型的数据,如果需要存储复杂的 JavaScript 对象,需要进行序列化和反序列化操作。

  • 「域名限制」:Web Storage API 的数据是与特定的域名关联的,无法在不同域名之间共享数据。

👍 5. 使用建议和注意事项

在使用 Web Storage API 时,以下是一些建议和注意事项:

  • 「适当使用 localStorage 和 sessionStorage」

根据需求选择合适的存储机制,如果需要持久性存储数据,使用localStorage,如果需要临时存储数据,使用 sessionStorage

  • 「数据安全性」

Web Storage API 中存储的数据是以明文形式保存的,因此避免存储敏感信息,如密码或个人身份信息。

  • 「容量限制」

尽管 Web Storage 提供较大的存储容量,但仍然要注意不要滥用存储空间,以免影响浏览器性能和用户体验。

  • 「考虑兼容性」

在使用 Web Storage API 时,要考虑不同浏览器的兼容性,并根据需要提供备选方案或使用 Polyfill 库来解决兼容性问题。

🍭 6. 总结

Web Storage API 可以帮助开发者在浏览器中管理数据。通过了解其概念、使用方法以及兼容性和优缺点,开发者可以更好地利用这个 API 来满足应用程序的需求。

🎯 7. 拓展学习

如果你对 Web Storage API 感兴趣,并想进一步了解相关内容,可以参考以下资料:

  • MDN Web Storage API 文档[2]

Mozilla Developer Network 上关于 Web Storage API 的详细文档,包含 API 的用法、示例和参考资料。

  • Using the Web Storage API[3]

HTML5 Rocks 上的一篇文章,介绍了如何使用 Web Storage API 进行数据存储和检索。

  • HTML5 Web Storage: Introduction and Examples[4]

SitePoint 上的一篇文章,提供了关于 Web Storage API 的简介和示例代码。

  • LocalForage[5]

一个基于 Web Storage API 的 JavaScript 库,提供更简单和统一的数据存储接口,并处理了一些兼容性和安全性问题。

希望这篇文章对你理解和使用 Web Storage API 有所帮助!

Reference

[1]

Can I use Web Storage: https://caniuse.com/?search=Storage

[2]

MDN Web Storage API 文档: https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API

[3]

Using the Web Storage API: https://www.html5rocks.com/en/features/storage

[4]

HTML5 Web Storage: Introduction and Examples: https://www.sitepoint.com/html5-web-storage

[5]

LocalForage: https://github.com/localForage/localForage

往期回顾

#

如何使用 TypeScript 开发 React 函数式组件?

#

11 个需要避免的 React 错误用法

#

6 个 Vue3 开发必备的 VSCode 插件

#

3 款非常实用的 Node.js 版本管理工具

#

6 个你必须明白 Vue3 的 ref 和 reactive 问题

#

6 个意想不到的 JavaScript 问题

#

试着换个角度理解低代码平台设计的本质

14f8994a3a203d3ee7d346b7414bc6a3.gif

回复“加群”,一起学习进步

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/570785.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【sop】含储能及sop的多时段配网优化模型

目录 1 主要内容 2 部分代码 3 程序结果 4 下载链接 1 主要内容 之前分享了含sop的配电网优化模型&#xff0c;链接含sop的配电网优化,很多同学在咨询如何增加储能约束&#xff0c;并进行多时段的优化&#xff0c;本次拓展该部分功能&#xff0c;在原代码的基础上增加储能模…

Paragon NTFS2023最新mac免费实用工具磁盘工具

mac虽然系统稳定&#xff0c;但在使用过程中也有一些瑕疵&#xff0c;如当mac连接到ntfs格式移动磁盘时&#xff0c;可能会出现移动磁盘无法在mac被正常读写的状况。遇到移动磁盘无法正常读写的状况&#xff0c;我们可以在mac中使用磁盘工具&#xff0c;以使mac获得对ntfs格式移…

Docker实战1-运行前端Vue项目

本次运行了两个项目&#xff0c;一个是开源的镜像&#xff0c;一个是自己的前端项目镜像 1 在docker中运行 keycloak docker run -p 8080:8080 -e KEYCLOAK_ADMINadmin -e KEYCLOAK_ADMIN_PASSWORDadmin quay.io/keycloak/keycloak:21.1.1 start-dev 这个最简单了&#xff0c…

版图设计IC617 virtuoso启动以及smic18mmrf加载库

一. 启动virtuoso 1.1 创建一个目录用于库管理 mkdir pro3 1.2 拷贝.bashrc到工程目录下&#xff0c;.bashrc存在~目录下&#xff0c;是一个隐藏文件&#xff0c;需要用ls -la查看 1.3 执行.bashrc文件 1.4 启动 virtuoso & 1.5 检查库中是否包含系统基本库&#xff0c;如…

【JavaSE】Java基础语法(十三):Java 中的集合(十分全面)

文章目录 List, Set, Queue, Map 四者的区别&#xff1f;集合框架底层数据结构总结ArrayList 和 Vector 的区别ArrayList 与 LinkedList 区别补充内容:RandomAccess 接⼝ArrayList 的扩容机制comparable 和 Comparator 的区别比较 HashSet、LinkedHashSet 和 TreeSet 三者的异同…

Java jdbcTemplate 获取数据表结构

表结构如图 代码 AutowiredJdbcTemplate jdbcTemplate;Testpublic void getColumnNames() throws Exception {String sql "select * from tb_test where 12 ";SqlRowSet sqlRowSet jdbcTemplate.queryForRowSet(sql);SqlRowSetMetaData sqlRsmd sqlRowSet.getMeta…

高手速成 | 过滤器、监听器的创建与配置

本节讲解过滤器、监听器的创建以及监听事件配置示例。 01、过滤器的创建与配置 【例1】创建过滤器及配置过滤规则。 (1) 在Eclipse中新建一个Web项目&#xff0c;取名为Chapt_09。在src目录下&#xff0c;新建一个名为com.test.filter的包。选中该包并按CtrlN组合键&#xf…

Linux之软件包管理

软件包管理 RPM RPM 概述 RPM&#xff08;RedHat Package Manager&#xff09;&#xff0c; RedHat软件包管理工具&#xff0c; 类似windows里面的setup.exe&#xff0c;是Linux这系列操作系统里面的打包安装工具&#xff0c; 它虽然是RedHat的标志&#xff0c; 但理念是通用…

Python自动化对每个文件夹及其子文件夹的Excel表加个表头(Excel不同名且有xls文件)...

点击上方“Python爬虫与数据挖掘”&#xff0c;进行关注 回复“书籍”即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 惟将旧物表深情&#xff0c;钿合金钗寄将去。 大家好&#xff0c;我是皮皮。 一、前言 上一篇文章&#xff0c;我们抛出了一个问题&#xff0c;这篇文章…

【iOS锁_@synchronized源码浅析】

文章目录 前言synchronized介绍加锁实例synchronized实现objc_sync_enter 和 objc_sync_exit objc_sync_enterobj存在SyncList的结构SyncList和SyncData的关系id2data函数的实现1. 使用快速缓存2. 获取该线程下的SyncCache3. 全局哈希表查找4. 生成新数据并写入缓存 总结 前言 …

35从零开始学Java之析构方法又是咋回事?

作者&#xff1a;孙玉昌&#xff0c;昵称【一一哥】&#xff0c;另外【壹壹哥】也是我哦 千锋教育高级教研员、CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者 前言 在上一篇文章中&#xff0c;壹哥给大家详细地介绍了构造方法的使用、特点等内容。我们知道&#xff0…

ESP32 :项目的创建及项目架构解析

一、项目的创建 方式一&#xff1a;基于IDF示例创建 在ESP&#xff0d;IDF中有example示例库&#xff0c;以其中的一个示例为模板创建项目。 1、打开示例库 查看 - 命令面板&#xff08;也可以按住CtrlShiftP 或 F&#xff11;&#xff09; 输入 show examples projects 2…

大数据开发之Hive案例篇8-解析XML

文章目录 一. 问题描述二. 解决方案2.1 官方文档2.2 XML格式不规范 一. 问题描述 今天接到一个新需求&#xff0c;hive表里面有个字段存储的是XML类型数据 数据格式: <a><b>bb</b><c>cc</c> </a>二. 解决方案 2.1 官方文档 遇到不懂的…

PyTorch-Forecasting一个新的时间序列预测库

时间序列预测在金融、天气预报、销售预测和需求预测等各个领域发挥着至关重要的作用。PyTorch- forecasting是一个建立在PyTorch之上的开源Python包&#xff0c;专门用于简化和增强时间序列的工作。在本文中我们介绍PyTorch-Forecasting的特性和功能&#xff0c;并进行示例代码…

xhs小红薯【帖子】采集工具python爬虫抓取

一、xhs【帖子/笔记/视频】采集工具链接 &#xff08;请复制链接至浏览器&#xff0c;进行数据采集&#xff09; http://106.53.68.168:9920/xhs-keyword-spider 能爬取到的属性字段如图1 (点击右侧下拉按钮&#xff0c;可任选字段&#xff09; 图1属性字段 二、爬取规则 …

计算机毕业论文选题推荐|软件工程|系列九

文章目录 导文题目导文 计算机毕业论文选题推荐|软件工程 (***语言)==使用其他任何编程语言 例如:基于(***语言)门窗账务管理系统的设计与实现 得到:基于JAVA门窗账务管理系统的设计与实现 基于vue门窗账务管理系统的设计与实现 等等 题目 基于(***语言)学生在校信息管…

哪些pdf编辑软件值得下载?办公常备软件

PDF&#xff08;Portable Document Format&#xff09;是一种广泛用于电子文件传输的文档格式。为了更好的编辑和管理PDF文档&#xff0c;许多PDF编辑软件逐渐发展出来。本文将介绍PDF编辑软件的功能和使用方法。 使用PDF编辑软件可以提高我们的工作效率和文档管理能力。下面介…

【AI提示】ChatGPT提示工程课程(吴恩达OpenAI)迭代提示词笔记(中文chatgpt版)...

Iterative Prompt Develelopment 迭代提示词开发 在本课中&#xff0c;您将反复分析和优化您的提示&#xff0c;以从产品说明书生成营销文案。 设置 import openai import osfrom dotenv import load_dotenv, find_dotenv _ load_dotenv(find_dotenv()) # read local .env fil…

漫画管理工具Kapowarr

之前老苏写过不少漫画相关的软件&#xff0c;Mango、Kavita、Komga等等&#xff0c;但和今天要介绍的 Kapowarr 不太一样&#xff0c;如果你之前用过 Radarr、Sonarr 等 *arr 系列软件&#xff0c;应该是很容易上手的 什么是 Kapowarr &#xff1f; Kapowarr&#xff08;以前的…

基于Android studio二手车交易系统app

客户端&#xff1a; 用户注册&#xff1a;通过输入用户名&#xff0c;密码&#xff0c;所在地&#xff0c;联系地址以及电话和电子邮件等信息进行用户信息的注册。 二手车查看&#xff1a;用户注册登录系统后&#xff0c;可以查看二手车的基本信息&#xff0c;通过二手车的品牌…