本地存储与会话存储:何时使用(使用小型项目)
您是否曾经想过在 Web 应用程序中是否应该使用 localStorage 或 sessionStorage?您并不孤单!
我也遇到过这种情况——想知道这两种存储选项哪一种最适合我的用例。
看起来,网络存储并不是网络开发中最迷人的部分,但它对于构建真正能做某事的现代网络应用程序至关重要。
如果您想保存用户偏好、处理表单数据或购物车,您需要决定哪种存储方法适合您的用例。
我不想解释所有细节,因为那会涉及太多理论,有时理论会令人困惑。我将用真实的代码示例向您展示这两种存储。
读完这篇文章后,您将知道何时应用哪种解决方案......
所以跟我一起来吧!
基础知识:你真正需要知道的内容
localStorage 就像一本笔记本,而 sessionStorage 就像一叠便签。笔记本会一直伴随着你,直到你撕掉页面(清除数据),而便签则会在你关上抽屉(结束会话)时被扔掉。
以下是一些共同点:
现在,看看它们的不同之处:
**本地存储:**
**会话存储:**
**快速补充说明**:两种存储类型都只用于前端。请勿在此处理敏感数据 — 这是安全后端存储的用途。
localStorage 深度探究
让我们面对现实吧 - 您可能大多数时间都使用这种存储,而且有充分的理由。当您需要在浏览器会话之间保留数据时,没有比 localStorage 更好的选择了。
**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'); } });
这段代码非常简单,它会保存用户喜欢的主题,并在用户再次访问时自动应用。没有什么特别的,只是实用而已。
session存储
有时您需要暂时保留数据 - 这时 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 <= 3; i++) { sessionStorage.removeItem(`formStep${i}`); } } }; // Example usage in form steps document.getElementById('step1-form').addEventListener('submit', (e) => { 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:**
**真正重要的性能技巧:**
**常见问题:**
**最后的想法:**为正确的工作选择正确的工具。localStorage 并不总是因为它是持久的而更好,sessionStorage 也并不总是因为它更干净而更好。首先考虑用户的需求。
如有疑问,请问自己:
“浏览器重启后这些数据还能保留下来吗?”
这就是您需要了解的全部内容,以便做出正确的选择。开始构建吧!