前端开发中常用的存储方法(带解析)

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: 前端存储方法包括Cookie、localStorage、sessionStorage、IndexedDB和已废弃的WebSQL。Cookie用于存储小量数据,每次请求时发送到服务器,可设置过期时间。localStorage和sessionStorage都是HTML5提供的,前者数据永久存储,后者会话关闭后清除。IndexedDB是存储大量结构化数据的数据库,支持索引和事务。WebSQL已废弃,但部分浏览器仍支持。Cache Storage用于缓存响应,提高离线访问性能,通过Service Worker控制。

前端存储是指在浏览器端存储数据的方法。以下是一些常见的前端存储方法及其详细介绍和解析:


一、Cookies(HTTP Cookies):

介绍:Cookies 是一小段存储在客户端的数据。它们在每次请求时通过 HTTP 头部发送到服务器,用于在客户端和服务器之间存储会话数据。

解析:Cookies 通常用于存储持久化数据,例如用户首选项、会话信息等。每个 Cookie 都有一个名称、一个值以及可选的属性,例如过期时间和作用域。它们的大小限制为 4KB 左右,并且可以由服务器进行读取和写入。

使用方法:

// 设置 Cookie
document.cookie = "key=value; expires=expiry_date; path=/";
// 获取 Cookie
const cookies = document.cookie;
// 删除 Cookie
document.cookie = "key=; expires=expiry_date; path=/"; // 将过期时间设置为过去的时间

image.gif


二、localStorage:

描述:localStorage 是 HTML5 提供的一种持久化存储的方法,用于在浏览器中存储键值对。

特点:数据存储在浏览器端,不会过期,除非手动清除或者浏览器数据被删除。

使用方法:

// 存储数据
localStorage.setItem(key, value);
// 获取数据
localStorage.getItem(key);
// 删除数据
localStorage.removeItem(key);
// 清除所有数据
localStorage.clear();

image.gif


三、sessionStorage:

描述:sessionStorage 与 localStorage 类似,也是 HTML5 提供的一种持久化存储的方法,用于在浏览器中存储键值对。

特点:数据存储在浏览器端,但是会话关闭后数据会被清除。

使用方法:

// 存储数据
sessionStorage.setItem(key, value);
// 获取数据
sessionStorage.getItem(key);
// 删除数据
sessionStorage.removeItem(key);
// 清除所有数据
sessionStorage.clear();

image.gif


四、IndexedDB:

描述:IndexedDB 是 HTML5 提供的一种非关系型数据库,用于在浏览器中存储大量的结构化数据。是一个提供结构化存储的浏览器 API,可以存储大量的数据,并支持索引进行高效查询。

解析:IndexedDB 是一个基于事件的数据库系统,支持事务操作。它允许创建对象存储空间来存储和检索 JavaScript 对象。由于其功能强大,可以处理大量数据,因此适用于离线应用、缓存数据等场景。

使用方法:

// 打开数据库
const request = indexedDB.open(databaseName, version);
request.onerror = function(event) {
  console.error("数据库打开错误!");
};
request.onsuccess = function(event) {
  const db = event.target.result;
  // 执行操作
};
// 存储数据
const transaction = db.transaction([objectStoreName], "readwrite");
const objectStore = transaction.objectStore(objectStoreName);
objectStore.add(data);
// 获取数据
const transaction = db.transaction([objectStoreName], "readonly");
const objectStore = transaction.objectStore(objectStoreName);
const request = objectStore.get(key);
request.onsuccess = function(event) {
  const data = event.target.result;
};
// 删除数据
const transaction = db.transaction([objectStoreName], "readwrite");
const objectStore = transaction.objectStore(objectStoreName);
objectStore.delete(key);
// 关闭数据库
db.close();

image.gif


五、WebSQL(已废弃):

描述:Web SQL 是一种在客户端存储数据的数据库技术,已不再是 HTML5 标准的一部分,但目前仍被一些浏览器所支持。

解析:WebSQL 提供了一个 SQL 数据库引擎,允许创建数据库、表和执行 SQL 查询。但是,它已被废弃,不再是标准的 Web API,并且在某些浏览器中不再受支持。

使用方法:

// 打开数据库
const db = openDatabase(databaseName, version, displayName, estimatedSize);
// 创建表
db.transaction(function(tx) {
  tx.executeSql("CREATE TABLE IF NOT EXISTS table_name (column1, column2, ...)");
});
// 插入数据
db.transaction(function(tx) {
  tx.executeSql("INSERT INTO table_name (column1, column2, ...) VALUES (?, ?, ...)", [value1, value2, ...]);
});
// 查询数据
db.transaction(function(tx) {
  tx.executeSql("SELECT column1, column2, ... FROM table_name WHERE condition", [], function(tx, result) {
    const rows = result.rows;
    // 处理查询结果
  });
});

image.gif


六、Cache Storage(缓存存储):

介绍:Cache Storage 是用于存储缓存响应的浏览器 API。它可以将网络请求的响应缓存起来,以供后续离线访问或提高性能。

解析:使用 Cache Storage,可以将文件(例如脚本、样式表和图像)缓存到浏览器中,并在用户离线时提供离线体验。它使用 Service Worker 进行控制,具有高度的可自定义性和灵活性。

使用方法:

1)打开缓存:(Cache Storage)
           
首先,需要使用 caches.open() 方法打开一个特定的缓存。该方法接受一个缓存名称作为参数,并返回一个 Promise 对象,用于表示缓存是否成功打开。

caches.open('my-cache')
  .then(function(cache) {
    // 在这里操作缓存
  });

image.gif

2)添加文件到缓存:

            使用 cache.add() 或 cache.addAll() 方法将文件添加到缓存中。例如

cache.add('/path/to/file'); // 添加单个文件
cache.addAll(['/path/to/file1', '/path/to/file2']); // 添加多个文件

image.gif

3)检索缓存中的响应:

            使用 cache.match() 方法从缓存中检索特定的请求。例如:

cache.match('/path/to/file')
  .then(function(response) {
    if (response) {
      // 处理响应
    }
  });

image.gif

4)更新缓存:

            使用 cache.put() 方法更新缓存中的响应。例如:

cache.match('/path/to/file')
  .then(function(response) {
    if (response) {
      // 更新缓存
      cache.put('/path/to/file', new Response('Updated content'));
    }
  });

image.gif

5)删除缓存:

            使用 cache.delete() 方法从缓存中删除指定的请求或响应。例如:

cache.delete('/path/to/file');

image.gif

6)清空缓存:

            使用 cache.clear() 方法清空整个缓存。例如:

cache.clear();

image.gif

  • 注意:Cache Storage API 必须在 Service Worker 脚本中使用,因为它需要在后台运行。要使用 Cache Storage,首先需要注册和安装一个 Service Worker。
  • 这是 Cache Storage 的基本用法,你可以根据具体需求进行扩展和定制。请注意,Cache Storage 的操作是异步的,因此需要使用 Promise 或 async/await 来处理结果和错误。
相关文章
|
16天前
|
人工智能
歌词结构的巧妙安排:写歌词的方法与技巧解析,妙笔生词AI智能写歌词软件
歌词创作是一门艺术,关键在于巧妙的结构安排。开头需迅速吸引听众,主体部分要坚实且富有逻辑,结尾则应留下深刻印象。《妙笔生词智能写歌词软件》提供多种 AI 功能,帮助创作者找到灵感,优化歌词结构,写出打动人心的作品。
|
2天前
|
JSON PHP 数据格式
PHP解析配置文件的常用方法
INI文件是最常见的配置文件格式之一。
|
2天前
|
机器学习/深度学习 编解码 前端开发
探索无界:前端开发中的响应式设计深度解析####
【10月更文挑战第29天】 在当今数字化时代,用户体验的优化已成为网站与应用成功的关键。本文旨在深入探讨响应式设计的核心理念、技术实现及最佳实践,揭示其如何颠覆传统布局限制,实现跨设备无缝对接,从而提升用户满意度和访问量。通过剖析响应式设计的精髓,我们将一同见证其在现代Web开发中的重要地位与未来趋势。 ####
21 7
|
4天前
|
编解码 前端开发 UED
探索无界:前端开发中的响应式设计深度解析与实践####
【10月更文挑战第29天】 本文深入探讨了响应式设计的核心理念,即通过灵活的布局、媒体查询及弹性图片等技术手段,使网站能够在不同设备上提供一致且优质的用户体验。不同于传统摘要概述,本文将以一次具体项目实践为引,逐步剖析响应式设计的关键技术点,分享实战经验与避坑指南,旨在为前端开发者提供一套实用的响应式设计方法论。 ####
25 4
|
8天前
|
机器学习/深度学习 人工智能 安全
TPAMI:安全强化学习方法、理论与应用综述,慕工大、同济、伯克利等深度解析
【10月更文挑战第27天】强化学习(RL)在实际应用中展现出巨大潜力,但其安全性问题日益凸显。为此,安全强化学习(SRL)应运而生。近日,来自慕尼黑工业大学、同济大学和加州大学伯克利分校的研究人员在《IEEE模式分析与机器智能汇刊》上发表了一篇综述论文,系统介绍了SRL的方法、理论和应用。SRL主要面临安全性定义模糊、探索与利用平衡以及鲁棒性与可靠性等挑战。研究人员提出了基于约束、基于风险和基于监督学习等多种方法来应对这些挑战。
21 2
|
13天前
|
缓存 前端开发 JavaScript
"面试通关秘籍:深度解析浏览器面试必考问题,从重绘回流到事件委托,让你一举拿下前端 Offer!"
【10月更文挑战第23天】在前端开发面试中,浏览器相关知识是必考内容。本文总结了四个常见问题:浏览器渲染机制、重绘与回流、性能优化及事件委托。通过具体示例和对比分析,帮助求职者更好地理解和准备面试。掌握这些知识点,有助于提升面试表现和实际工作能力。
47 1
|
13天前
|
前端开发 JavaScript 开发者
揭秘前端高手的秘密武器:深度解析递归组件与动态组件的奥妙,让你代码效率翻倍!
【10月更文挑战第23天】在Web开发中,组件化已成为主流。本文深入探讨了递归组件与动态组件的概念、应用及实现方式。递归组件通过在组件内部调用自身,适用于处理层级结构数据,如菜单和树形控件。动态组件则根据数据变化动态切换组件显示,适用于不同业务逻辑下的组件展示。通过示例,展示了这两种组件的实现方法及其在实际开发中的应用价值。
21 1
|
16天前
|
安全 Java
Java多线程通信新解:本文通过生产者-消费者模型案例,深入解析wait()、notify()、notifyAll()方法的实用技巧
【10月更文挑战第20天】Java多线程通信新解:本文通过生产者-消费者模型案例,深入解析wait()、notify()、notifyAll()方法的实用技巧,包括避免在循环外调用wait()、优先使用notifyAll()、确保线程安全及处理InterruptedException等,帮助读者更好地掌握这些方法的应用。
13 1
|
29天前
|
缓存 Java 程序员
Map - LinkedHashSet&Map源码解析
Map - LinkedHashSet&Map源码解析
64 0
|
29天前
|
算法 Java 容器
Map - HashSet & HashMap 源码解析
Map - HashSet & HashMap 源码解析
51 0

推荐镜像

更多
下一篇
无影云桌面