• 主页

  • 投资

  • IT

    🔥
  • 设计

  • 销售

  • 共240篇

    前端 - HTML5

关闭

返回栏目

关闭

返回前端 - HTML5栏目

216 - 本地存储 - localStorage - 存储容量与有效期

作者:

贺及楼

成为作者

更新日期:2025-02-27 18:13:47

本地存储 - localStorage - 存储容量与有效期

在前端开发中,我们经常需要在客户端存储一些数据,以便在不同的页面或会话之间使用。HTML5 提供了几种本地存储方案,其中 localStorage 是一种非常实用且常用的方式。本文将深入探讨 localStorage 的存储容量与有效期,同时给出相关的演示代码。

什么是 localStorage?

localStorage 是 HTML5 新增的一个会话存储对象,它允许网页在浏览器中存储键值对数据。与 sessionStorage 不同,localStorage 中的数据不会随着页面会话的结束而被清除,除非手动删除,数据会一直存储在浏览器中。

localStorage 的存储容量

容量大小

不同浏览器对 localStorage 的存储容量有所不同,但通常情况下,大多数浏览器提供了大约 5MB 的存储空间。以下是一些常见浏览器的大致存储容量:
| 浏览器 | 存储容量 |
| —— | —— |
| Chrome | 约 5MB |
| Firefox | 约 5MB |
| Safari | 约 5MB |
| Edge | 约 5MB |

检测存储容量

我们可以通过编写代码来检测当前浏览器中 localStorage 的剩余可用空间。以下是一个简单的示例:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>检测 localStorage 存储容量</title>
  7. </head>
  8. <body>
  9. <script>
  10. function checkStorageCapacity() {
  11. let testKey = 'test';
  12. let testValue = 'a'.repeat(1024 * 1024); // 1MB 的数据
  13. let storedData = '';
  14. let counter = 0;
  15. try {
  16. while (true) {
  17. storedData += testValue;
  18. localStorage.setItem(testKey, storedData);
  19. counter++;
  20. console.log(`已存储 ${counter}MB 数据`);
  21. }
  22. } catch (e) {
  23. console.log(`达到存储上限,大约存储了 ${counter}MB 数据`);
  24. localStorage.removeItem(testKey); // 清理测试数据
  25. }
  26. }
  27. checkStorageCapacity();
  28. </script>
  29. </body>
  30. </html>

在上述代码中,我们不断向 localStorage 中存储 1MB 的数据,直到达到存储上限并捕获到异常。最后,我们会输出大约存储的数据量,并清理测试数据。

localStorage 的有效期

localStorage 的一个重要特点是其数据没有明确的有效期。一旦数据被存储到 localStorage 中,它将一直保留在浏览器中,直到以下情况发生:

  1. 手动删除:可以使用 localStorage.removeItem(key) 方法删除指定键的数据,或使用 localStorage.clear() 方法清空所有数据。
    ```javascript
    // 删除指定键的数据
    localStorage.removeItem(‘username’);

// 清空所有数据
localStorage.clear();

  1. 2. **用户手动清除浏览器缓存**:当用户在浏览器设置中清除缓存数据时,`localStorage` 中的数据也会被一并清除。
  2. ### 模拟有效期
  3. 虽然 `localStorage` 本身没有有效期的概念,但我们可以通过在存储数据时添加时间戳来模拟有效期。以下是一个示例:
  4. ```html
  5. <!DOCTYPE html>
  6. <html lang="en">
  7. <head>
  8. <meta charset="UTF-8">
  9. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  10. <title>模拟 localStorage 有效期</title>
  11. </head>
  12. <body>
  13. <script>
  14. function setWithExpiry(key, value, ttl) {
  15. const now = new Date();
  16. const item = {
  17. value: value,
  18. expiry: now.getTime() + ttl
  19. };
  20. localStorage.setItem(key, JSON.stringify(item));
  21. }
  22. function getWithExpiry(key) {
  23. const itemStr = localStorage.getItem(key);
  24. if (!itemStr) {
  25. return null;
  26. }
  27. const item = JSON.parse(itemStr);
  28. const now = new Date();
  29. if (now.getTime() > item.expiry) {
  30. localStorage.removeItem(key);
  31. return null;
  32. }
  33. return item.value;
  34. }
  35. // 存储数据,有效期为 1 分钟(60000 毫秒)
  36. setWithExpiry('testData', '这是测试数据', 60000);
  37. // 获取数据
  38. const data = getWithExpiry('testData');
  39. if (data) {
  40. console.log('获取到有效数据:', data);
  41. } else {
  42. console.log('数据已过期或不存在');
  43. }
  44. </script>
  45. </body>
  46. </html>

在上述代码中,我们定义了两个函数 setWithExpirygetWithExpirysetWithExpiry 用于存储数据时添加过期时间,getWithExpiry 用于获取数据时检查是否过期。

总结

localStorage 是一种方便的前端本地存储方案,它提供了大约 5MB 的存储空间,并且数据没有明确的有效期,除非手动删除或用户清除浏览器缓存。我们可以通过一些技巧模拟有效期,以满足特定的业务需求。在使用 localStorage 时,需要注意存储容量的限制,避免超出上限导致数据存储失败。