【前端面试】一篇讲透客户端存储——IndexedDB、Cookie……

本文主要是介绍【前端面试】一篇讲透客户端存储——IndexedDB、Cookie……,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

存储空间

IndexedDB 是一种在用户浏览器中运行的客户端存储技术,它允许网页应用程序存储大量结构化数据。IndexedDB 存储空间的底层实际上是使用用户的本地文件系统来存储数据的。

以下是一些关于 IndexedDB 存储空间的底层细节:

  1. 文件系统:IndexedDB 数据存储在用户的文件系统中,但具体位置对于用户来说是抽象的,并且由浏览器管理。

  2. 浏览器管理:浏览器为每个域(或称为源)创建和管理一个或多个数据库文件。这些文件通常位于用户的个人文件夹中,例如 ~/.local/share 在 Linux 上,或者在 Windows 上的 AppData 目录下。

  3. 安全性:IndexedDB 受到同源策略的限制,只有创建它的域可以访问这些数据。

  4. 存储限制:虽然 IndexedDB 提供了比传统 Cookie 和 Web Storage(localStorage 和 sessionStorage)更大的存储空间,但它仍然有存储限制。这些限制通常是基于用户磁盘空间的百分比来动态计算的。

  5. 临时和持久存储:IndexedDB 支持临时存储和持久存储。持久存储的数据会一直保留,直到用户或浏览器显式删除它们。临时存储的数据可能会在浏览器需要释放空间时被自动删除。

  6. 数据格式:IndexedDB 存储的数据是结构化的,可以是字符串、二进制数据、对象等。数据通过对象存储(Object Stores)和索引(Indexes)进行组织,以便于高效查询。

  7. 事务性:IndexedDB 提供了事务性的数据读写操作,确保数据的一致性和完整性。

  8. 隐私模式:在某些浏览器的隐私或无痕模式下,IndexedDB 的使用可能会受到限制,数据可能不会被保存。

  9. 跨浏览器:不同浏览器可能在 IndexedDB 的实现细节上有所不同,但核心概念和 API 是一致的。

  10. 用户清理:用户可以通过浏览器的设置或使用第三方工具清理 IndexedDB 数据。

总的来说,IndexedDB 的存储空间是浏览器在用户的设备上管理的一部分文件系统,专门用于存储网页应用程序的数据。

IndexedDB API

存储代码示例

  1. 打开或创建数据库

    var request = window.indexedDB.open('myDatabase', 1);
    request.onupgradeneeded = function(event) {var db = event.target.result;if (!db.objectStoreNames.contains('store')) {db.createObjectStore('store', {keyPath: 'id'});}
    };
    request.onsuccess = function(event) {var db = event.target.result;console.log('Database opened successfully');
    };
    request.onerror = function(event) {console.error('Database error:', event.target.error);
    };
    
  2. 添加数据到对象存储

    function addData(db, storeName, data) {var transaction = db.transaction([storeName], 'readwrite');var store = transaction.objectStore(storeName);var request =

这篇关于【前端面试】一篇讲透客户端存储——IndexedDB、Cookie……的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1094122

相关文章

HTML5的input标签的`type`属性值详解和代码示例

《HTML5的input标签的`type`属性值详解和代码示例》HTML5的`input`标签提供了多种`type`属性值,用于创建不同类型的输入控件,满足用户输入的多样化需求,从文本输入、密码输入、... 目录一、引言二、文本类输入类型2.1 text2.2 password2.3 textarea(严格

详解C++ 存储二进制数据容器的几种方法

《详解C++存储二进制数据容器的几种方法》本文主要介绍了详解C++存储二进制数据容器,包括std::vector、std::array、std::string、std::bitset和std::ve... 目录1.std::vector<uint8_t>(最常用)特点:适用场景:示例:2.std::arra

一篇文章让你彻底搞懂Java中VO、DTO、BO、DO、PO

《一篇文章让你彻底搞懂Java中VO、DTO、BO、DO、PO》在java编程中我们常常需要做数据交换,那么在数据交换过程中就需要使用到实体对象,这就不可避免的使用到vo、dto、po等实体对象,这篇... 目录深入浅出讲解各层对象区别+实战应用+代码对比,告别概念混淆,设计出更优雅的系统架构!一、 为什么

SpringBoot返回文件让前端下载的几种方式

《SpringBoot返回文件让前端下载的几种方式》文章介绍了开发中文件下载的两种常见解决方案,并详细描述了通过后端进行下载的原理和步骤,包括一次性读取到内存和分块写入响应输出流两种方法,此外,还提供... 目录01 背景02 一次性读取到内存,通过响应输出流输出到前端02 将文件流通过循环写入到响应输出流

SpringBoot+Vue3整合SSE实现实时消息推送功能

《SpringBoot+Vue3整合SSE实现实时消息推送功能》在日常开发中,我们经常需要实现实时消息推送的功能,这篇文章将基于SpringBoot和Vue3来简单实现一个入门级的例子,下面小编就和大... 目录前言先大概介绍下SSE后端实现(SpringBoot)前端实现(vue3)1. 数据类型定义2.

前端Visual Studio Code安装配置教程之下载、汉化、常用组件及基本操作

《前端VisualStudioCode安装配置教程之下载、汉化、常用组件及基本操作》VisualStudioCode是微软推出的一个强大的代码编辑器,功能强大,操作简单便捷,还有着良好的用户界面,... 目录一、Visual Studio Code下载二、汉化三、常用组件1、Auto Rename Tag2

MySQL中存储过程(procedure)的使用及说明

《MySQL中存储过程(procedure)的使用及说明》存储过程是预先定义的SQL语句集合,可在数据库中重复调用,它们提供事务性、高效性和安全性,MySQL和Java中均可创建和调用存储过程,示例展... 目录概念示例1示例2总结概念存储过程:在数据库中预先定义好一组SQL语句,可以被程序反复调用。

MySQL存储过程实践(in、out、inout)

《MySQL存储过程实践(in、out、inout)》文章介绍了数据库中的存储过程,包括其定义、优缺点、性能调校与撰写,以及创建和调用方法,还详细说明了存储过程的参数类型,包括IN、OUT和INOUT... 目录简述存储过程存储过程的优缺点优点缺点存储过程的创建和调用mysql 存储过程中的关键语法案例存储

Java Lettuce 客户端入门到生产的实现步骤

《JavaLettuce客户端入门到生产的实现步骤》本文主要介绍了JavaLettuce客户端入门到生产的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目录1 安装依赖MavenGradle2 最小化连接示例3 核心特性速览4 生产环境配置建议5 常见问题

一篇文章彻底搞懂macOS如何决定java环境

《一篇文章彻底搞懂macOS如何决定java环境》MacOS作为一个功能强大的操作系统,为开发者提供了丰富的开发工具和框架,下面:本文主要介绍macOS如何决定java环境的相关资料,文中通过代码... 目录方法一:使用 which命令方法二:使用 Java_home工具(Apple 官方推荐)那问题来了,