搜索
首页web前端js教程本地存储与会话存储:何时使用每种存储(对于小型项目)

Local Storage vs Session Storage: When to Use Each (With Mini Projects)

您是否想过是否应该在 Web 应用程序中使用 localStorage 还是 sessionStorage?你并不孤单!

我也遇到过这种情况 - 想知道这两个存储选项中哪一个最适合我的用例。

看,Web 存储并不是 Web 开发中最令人着迷的部分,但它对于构建实际执行某些操作的现代 Web 应用程序至关重要。

如果您想保存用户首选项、使用表单数据或购物车,您需要确定哪种存储方法适合您的用例。

我不想解释所有细节,因为这会涉及太多理论,有时理论会令人困惑。我将通过真实的代码示例向您展示这两种存储。

您将在本文末尾知道何时应用哪种解决方案......

那就跟着我吧!

基础知识:您真正需要了解的内容

localStorage 就像一个笔记本,sessionStorage 就像一叠便签纸。您的笔记本将一直留在您身边,直到您撕下页面(清除数据),而当您关闭办公桌抽屉(结束会话)时,便利贴将被扔掉。

以下是一些共同点:

  • 它们都以键值的形式存储数据。

  • 它们为您提供大约 5-10MB 的存储空间(取决于浏览器)

  • 它们是同步的并且只存储字符串(是的,甚至你的对象也需要 JSON 转换)

  • 它们可以通过相同的简单 API 访问。

现在,以下是它们的不同之处:

本地存储:

  • 一直存在,直到您手动清除它

  • 跨浏览器选项卡和窗口保留数据

  • 不要将某些内容保留太久(例如用户偏好或保存的游戏状态)

会话存储:

  • 当您关闭浏览器选项卡时它就会消失。

  • 与您正在使用的特定选项卡保持隔离

  • 非常适合不应保留的临时数据(例如表单状态或一次性令牌)

快速旁注:两种存储类型都仅限前端。不要在此处处理敏感数据 - 这就是安全后端存储的用途。

本地存储深入研究

让我们面对现实吧 - 您可能大部分时间都在使用此存储,并且有充分的理由。当您需要在浏览器会话之间保留数据时,没有比 localStorage 更好的选择了。

本地存储的最佳用例:

  • 主题偏好(深色/浅色模式)
  • 购物车中的商品
  • 用户的语言设置
  • 游戏进度
  • 缓存的 API 响应

快速提醒 - 我见过太多开发者以艰难的方式学习这些:

  • 不要在这里存储敏感数据(这不安全)
  • 注意存储限制
  • 存储前记得使用 JSON.stringify
  • 小心过期 - localStorage 不会自动过期

让我给您一个非常简单的主题切换器的具体示例。

const themeToggle = document.getElementById('theme-toggle');
const body = document.body;

// Check for saved theme on page load
document.addEventListener('DOMContentLoaded', () => {
    const savedTheme = localStorage.getItem('theme');
    if (savedTheme) {
        body.classList.add(savedTheme);
        themeToggle.checked = savedTheme === 'dark-mode';
    }
});

// Handle theme changes
themeToggle.addEventListener('change', () => {
    if (themeToggle.checked) {
        body.classList.add('dark-mode');
        localStorage.setItem('theme', 'dark-mode');
    } else {
        body.classList.remove('dark-mode');
        localStorage.setItem('theme', 'light-mode');
    }
});

这段代码非常简单,它将保存用户首选的主题,并在用户重新访问时自动应用。没什么花哨的,只是实用。

会话存储

有时您需要数据保留一段时间 - 这就是 sessionStorage 的亮点。

想想那些时候,您想要跟踪某些内容,直到用户关闭其浏览器选项卡,而不是再多一秒。

sessionStorage 的完美场景:

  • 多步表单数据
  • 临时身份验证令牌
  • 单会话用户偏好
  • 长文章中的页面位置
  • 向导或教程进度

这是我们的多步骤表单代码,显示了 sessionStorage 的实际应用:

// Multi-Step Form Mini-Project
const formSteps = {
    saveStep(stepNumber, data) {
        sessionStorage.setItem(`formStep${stepNumber}`, JSON.stringify(data));
    },

    loadStep(stepNumber) {
        const savedData = sessionStorage.getItem(`formStep${stepNumber}`);
        return savedData ? JSON.parse(savedData) : null;
    },

    clearForm() {
        // Clear only our form data, not other sessionStorage items
        for (let i = 1; i  {
    e.preventDefault();
    const data = {
        name: document.getElementById('name').value,
        email: document.getElementById('email').value
    };
    formSteps.saveStep(1, data);
    // Move to next step
});

// Load saved data when user returns to a step
window.addEventListener('load', () => {
    const step1Data = formSteps.loadStep(1);
    if (step1Data) {
        document.getElementById('name').value = step1Data.name;
        document.getElementById('email').value = step1Data.email;
    }
});

这里的关键是,如果有人不小心关闭了选项卡,他们会重新开始 - 不会有过时的数据。但如果他们只是在步骤之间导航,那么他们的进度是安全的。

做出正确的选择

让我们切入正题 - 以下是推动您做出存储决定的因素:

在以下情况下选择 localStorage:

  • 用户希望他们的数据能够持续存在(例如保存的偏好设置)
  • 您正在缓存不经常更改的数据
  • 您需要在选项卡之间共享数据
  • 用户便利性胜过数据新鲜度

在以下情况下使用 sessionStorage:

  • 数据在设计上应该是临时的
  • 您正在处理敏感的临时令牌
  • 每个选项卡都需要自己的隔离状态
  • 您希望在重新启动时保证干净整洁

真正重要的性能提示:

  • 不要存储大量对象 - 两种存储类型都是同步的
  • 尽可能批量存储操作
  • 记住 5-10MB 限制
  • 始终处理存储错误(用户可能将其禁用)

常见问题:

  • 在存储之前始终对对象进行字符串化
  • 不要假设存储空间可用
  • 注意多选项卡场景中的存储事件
  • 记得清理旧的/未使用的数据

最后的想法:为正确的工作选择正确的工具。 localStorage 并不总是因为它是持久的而更好,而 sessionStorage 并不总是因为它更干净而更好。首先考虑用户的需求。

当有疑问时,问问自己:
“浏览器重新启动后,这些数据是否应该继续存在?”

  • 是 → 本地存储
  • 否 → sessionStorage

这就是您做出正确选择所需要知道的一切。开始建造!

以上是本地存储与会话存储:何时使用每种存储(对于小型项目)的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
JavaScript的角色:使网络交互和动态JavaScript的角色:使网络交互和动态Apr 24, 2025 am 12:12 AM

JavaScript是现代网站的核心,因为它增强了网页的交互性和动态性。1)它允许在不刷新页面的情况下改变内容,2)通过DOMAPI操作网页,3)支持复杂的交互效果如动画和拖放,4)优化性能和最佳实践提高用户体验。

C和JavaScript:连接解释C和JavaScript:连接解释Apr 23, 2025 am 12:07 AM

C 和JavaScript通过WebAssembly实现互操作性。1)C 代码编译成WebAssembly模块,引入到JavaScript环境中,增强计算能力。2)在游戏开发中,C 处理物理引擎和图形渲染,JavaScript负责游戏逻辑和用户界面。

从网站到应用程序:JavaScript的不同应用从网站到应用程序:JavaScript的不同应用Apr 22, 2025 am 12:02 AM

JavaScript在网站、移动应用、桌面应用和服务器端编程中均有广泛应用。1)在网站开发中,JavaScript与HTML、CSS一起操作DOM,实现动态效果,并支持如jQuery、React等框架。2)通过ReactNative和Ionic,JavaScript用于开发跨平台移动应用。3)Electron框架使JavaScript能构建桌面应用。4)Node.js让JavaScript在服务器端运行,支持高并发请求。

Python vs. JavaScript:比较用例和应用程序Python vs. JavaScript:比较用例和应用程序Apr 21, 2025 am 12:01 AM

Python更适合数据科学和自动化,JavaScript更适合前端和全栈开发。1.Python在数据科学和机器学习中表现出色,使用NumPy、Pandas等库进行数据处理和建模。2.Python在自动化和脚本编写方面简洁高效。3.JavaScript在前端开发中不可或缺,用于构建动态网页和单页面应用。4.JavaScript通过Node.js在后端开发中发挥作用,支持全栈开发。

C/C在JavaScript口译员和编译器中的作用C/C在JavaScript口译员和编译器中的作用Apr 20, 2025 am 12:01 AM

C和C 在JavaScript引擎中扮演了至关重要的角色,主要用于实现解释器和JIT编译器。 1)C 用于解析JavaScript源码并生成抽象语法树。 2)C 负责生成和执行字节码。 3)C 实现JIT编译器,在运行时优化和编译热点代码,显着提高JavaScript的执行效率。

JavaScript在行动中:现实世界中的示例和项目JavaScript在行动中:现实世界中的示例和项目Apr 19, 2025 am 12:13 AM

JavaScript在现实世界中的应用包括前端和后端开发。1)通过构建TODO列表应用展示前端应用,涉及DOM操作和事件处理。2)通过Node.js和Express构建RESTfulAPI展示后端应用。

JavaScript和Web:核心功能和用例JavaScript和Web:核心功能和用例Apr 18, 2025 am 12:19 AM

JavaScript在Web开发中的主要用途包括客户端交互、表单验证和异步通信。1)通过DOM操作实现动态内容更新和用户交互;2)在用户提交数据前进行客户端验证,提高用户体验;3)通过AJAX技术实现与服务器的无刷新通信。

了解JavaScript引擎:实施详细信息了解JavaScript引擎:实施详细信息Apr 17, 2025 am 12:05 AM

理解JavaScript引擎内部工作原理对开发者重要,因为它能帮助编写更高效的代码并理解性能瓶颈和优化策略。1)引擎的工作流程包括解析、编译和执行三个阶段;2)执行过程中,引擎会进行动态优化,如内联缓存和隐藏类;3)最佳实践包括避免全局变量、优化循环、使用const和let,以及避免过度使用闭包。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。