本地存储与会话存储:何时使用(使用小型项目)
您是否曾经想过在 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 也并不总是因为它更干净而更好。首先考虑用户的需求。
如有疑问,请问自己:
“浏览器重启后这些数据还能保留下来吗?”
这就是您需要了解的全部内容,以便做出正确的选择。开始构建吧!