首页 > 其他分享 >【前端面试系列】Web 本地存储全面详解

【前端面试系列】Web 本地存储全面详解

时间:2024-11-18 15:17:17浏览次数:3  
标签:Web 存储 const 面试 详解 Cookie key localStorage

一、本地存储方案概述

现代 Web 应用中常用的本地存储方案主要包括:

  • Cookie
  • Web Storage (localStorage / sessionStorage)
  • IndexedDB
  • Web SQL Database (已废弃)
  • Cache API
  • File System API

二、详细介绍

1. Cookie

1.1 基本概念

Cookie 是服务器发送到用户浏览器并保存在本地的一小块数据。它会在浏览器下次向同一服务器发起请求时被携带并发送到服务器上。

1.2 核心属性
  • Name: Cookie 的名称
  • Value: Cookie 的值
  • Domain: 可以访问该 Cookie 的域名
  • Path: 可以访问该 Cookie 的页面路径
  • Expires/Max-Age: Cookie 的过期时间
  • Size: Cookie 的大小不能超过 4KB
  • HttpOnly: 设置了 HttpOnly 属性的 cookie 不能通过 JavaScript 访问
  • Secure: 只有在 HTTPS 协议下才能传输
  • SameSite: 防止 CSRF 攻击和用户追踪
1.3 使用示例
// 设置 Cookie
document.cookie = "username=John Doe; expires=Thu, 18 Dec 2023 12:00:00 UTC; path=/";

// 获取 Cookie
const getCookie = (name) => {
  const cookies = document.cookie.split(';');
  for(let cookie of cookies) {
    const [cookieName, cookieValue] = cookie.split('=');
    if(cookieName.trim() === name) {
      return decodeURIComponent(cookieValue);
    }
  }
  return null;
};

// 删除 Cookie
document.cookie = "username=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";

2. Web Storage

2.1 localStorage

特点:

  • 持久化存储,数据永久保存
  • 存储容量通常为 5-10MB
  • 同源策略限制
  • 仅支持字符串存储
// 存储对象
localStorage.setItem('user', JSON.stringify({name: 'John', age: 30}));

// 获取对象
const user = JSON.parse(localStorage.getItem('user'));

// 监听存储变化
window.addEventListener('storage', (e) => {
  console.log('Storage changed:', e.key, e.newValue, e.oldValue);
});
2.2 sessionStorage

特点:

  • 会话级存储,关闭标签页即清除
  • 容量与 localStorage 相同
  • 同一个会话中的页面才能访问相同的数据

3. IndexedDB

3.1 特点
  • 支持索引和事务
  • 支持二进制存储
  • 异步操作
  • 支持版本控制
3.2 基本使用示例
// 打开数据库
const request = indexedDB.open("MyDatabase", 1);

request.onerror = (event) => {
  console.error("Database error: " + event.target.error);
};

request.onsuccess = (event) => {
  const db = event.target.result;
  // 使用数据库
};

request.onupgradeneeded = (event) => {
  const db = event.target.result;
  const objectStore = db.createObjectStore("users", { keyPath: "id" });
  objectStore.createIndex("name", "name", { unique: false });
};

三、存储方案对比

特性CookielocalStoragesessionStorageIndexedDB
容量4KB5-10MB5-10MB>250MB
有效期可设置永久会话期间永久
作用域同源+路径同源同标签页同源
通信每次请求发送不发送不发送不发送
API易用性简单简单简单复杂
数据类型字符串字符串字符串任意

四、常见面试题

1. localStorage 和 sessionStorage 的区别?

答:主要区别在于:

  1. 生命周期不同:localStorage 永久存储,sessionStorage 仅在会话期间有效
  2. 作用域不同:sessionStorage 仅在同一标签页中共享,localStorage 在同源的所有标签页共享
  3. 存储事件:localStorage 的修改会触发其他页面的 storage 事件,sessionStorage 不会

2. Cookie 和 Web Storage 的区别?

答:主要区别:

  1. 容量限制不同:Cookie 4KB,Web Storage 5-10MB
  2. 是否随请求发送:Cookie 会自动随请求发送,Web Storage 不会
  3. 操作方式:Cookie 操作相对复杂,Web Storage API 简单直观
  4. 数据访问:Cookie 可以服务器端设置,Web Storage 仅客户端可访问

3. 如何实现 localStorage 的过期功能?

答:可以封装一个带过期时间的存储方法:

const storage = {
  set(key, value, expires) {
    const data = {
      value,
      expires: expires ? new Date().getTime() + expires : null
    };
    localStorage.setItem(key, JSON.stringify(data));
  },
  
  get(key) {
    const data = JSON.parse(localStorage.getItem(key));
    if (data) {
      if (data.expires && data.expires < new Date().getTime()) {
        localStorage.removeItem(key);
        return null;
      }
      return data.value;
    }
    return null;
  }
};

4. 如何处理 localStorage 的容量超出问题?

答:可以采用以下策略:

  1. 实现 LRU 缓存淘汰算法
  2. 压缩数据后再存储
  3. 分片存储大数据
  4. 及时清理无用数据
// LRU 缓存示例
class LRUStorage {
  constructor(limit = 5) {
    this.limit = limit;
    this.cache = new Map();
  }

  set(key, value) {
    if (this.cache.size >= this.limit) {
      const firstKey = this.cache.keys().next().value;
      this.cache.delete(firstKey);
    }
    this.cache.delete(key);
    this.cache.set(key, value);
    this.syncToStorage();
  }

  private syncToStorage() {
    localStorage.setItem('cache', JSON.stringify([...this.cache]));
  }
}

五、最佳实践建议

  1. 根据数据特性选择合适的存储方式:

    • 用户标识、认证信息:Cookie
    • 临时数据:sessionStorage
    • 应用配置、主题设置:localStorage
    • 大量结构化数据:IndexedDB
  2. 安全性考虑:

    • 敏感数据加密存储
    • 设置 Cookie 的 HttpOnly 和 Secure 属性
    • 定期清理过期数据
  3. 性能优化:

    • 避免存储过大数据
    • 合理使用序列化和反序列化
    • 批量操作时使用事务

写在最后

感谢您花时间阅读这篇文章!

标签:Web,存储,const,面试,详解,Cookie,key,localStorage
From: https://blog.csdn.net/qq_35732986/article/details/143858261

相关文章

  • 新版华为认证全套资料(题库试题、知识点速记、考试大纲、思维导图、面试宝典)
    话不多说,直接上硬菜!一、HCIA、HCIP题库试题华为认证考试题型有单选、多选、判断、填空、拖拽题,每种题型常考什么知识点,各种知识点又会以什么样的方式去考察,都需要我们在不断刷题练习中去熟悉!HCIA题库试题:1、以下关于路由器的描述,说法错误的是?()A、路由器可以作为网关设备......
  • leetcode面试题 17.17. 多次搜索
    给定一个较长字符串big和一个包含较短字符串的数组smalls,设计一个方法,根据smalls中的每一个较短字符串,对big进行搜索。输出smalls中的字符串在big里出现的所有位置positions,其中positions[i]为smalls[i]出现的所有位置。示例:输入:big="mississippi"smalls=["is","ppi",......
  • 编程之路,从0开始:结构体详解
    目录前言正文1、结构体引入2、结构体的声明3、typedef4、结构体的匿名声明5、结构的自引用(1)链表(2)自引用6、结构体内存对齐(1)对齐规则(2)题目(3)为什么存在内存对齐?(4)默认对齐数7、结构体实现位段(1)什么是位段(2)位段的跨平台问题(3)位段的应用总结 前言     ......
  • 教师资格证面试最保险的上岸做法
    目录1、首先是自己的出场顺序。2、需不要穿正装3、不要想着表现的完美4、说话的声音5、模拟练习,越多越好6、对于不会回答的问题巧妙回答总结        我在面试之前也做了一些分析,通过几个方面的准备让自己的把握大一些。现在分享给大家我最保险的做法。   ......
  • web——upload-labs——第一关
    今天新开一个upload-labs的靶场,文件上传,加油!!!!先讲讲文件上传文件上传:在Web开发中,文件上传功能是一个允许用户将文件(例如图片、文档)上传到服务器的常见特性。为了确保安全和数据一致性,通常需要在这个过程中实施前端验证和后端验证。这两种验证机制的目的是确保上传的文件符合预......
  • Go语言跨平台桌面应用开发新纪元:LCL、CEF与Webview全解析
    开篇寄语在Go语言的广阔生态中,桌面应用开发一直是一个备受关注的领域。今天,我将为大家介绍三款基于Go语言的跨平台桌面应用开发框架——LCL、CEF与Webview,它们分别拥有独特的魅力和广泛的应用场景。通过这三款框架,你将能够轻松开发出功能强大、界面美观的跨平台桌面应用程序。......
  • 打造智能路由的 LLM 应用:条件分支链详解
    核心要点掌握LLM应用中的动态路由策略实现健壮的错误处理机制构建实用的多语言内容处理系统学习降级策略的最佳实践动态路由机制解析在复杂的LLM应用中,不同的输入往往需要不同的处理路径。动态路由可以帮助我们:优化资源使用提高响应准确性增强系统可靠性控制处理......
  • LLM的不同精度详解和显存占用,FP16,FP32,BF16
    目录前言1、FP162、BF163、FP324、不同精度的显存占用5、不同精度之间的转换总结前言本文主要介绍LLM的三种不同精度FP16,FP32,BF16的概念和计算,并用pytorch进行演示;不同精度下的显存占用,以及不同精度的相互转换。1、FP16FP16也叫 float16,全称是Half-precisionflo......
  • 面试官:说一下API网关的作用?企业如何应用API网关?
    一、API网关的用处API网关我的分析中会用到以下三种场景。1、OpenAPI企业需要将自身数据、能力等作为开发平台向外开放,通常会以rest的方式向外提供。最好的例子就是淘宝开放平台、腾讯公司的QQ开发平台、微信开放平台。OpenAPI开放平台必然涉及到客户应用的接入、API权限......
  • 2024年腾讯云双11云服务器大促详解,优惠享不停
    一、2024年腾讯云双十一活动时间腾讯云双十一活动将于即日起至2024年11月30日,活动时间跨度很长,让用户有足够的时间选购自己所需的云产品和服务。具体以页面变更为准。二、2024年腾讯云双十一活动入口腾讯云双11活动:【点此直达】了解。​​三、2024年腾讯云双十一活动内容......