学习HTML5网络存储API教程

109 阅读3分钟

网络存储API介绍

网络存储是一个在网络应用程序的客户端存储用户特定内容的过程。内容将以键和值的形式存储。这是作为HTML5 API规范的一部分引入的。在此之前,内容将使用cookies存储在客户端。Cookies有一些缺点。

你也可以查看我之前关于Angular的本地和会话存储的文章

Cookies的缺点

  • 所有的浏览器都不支持cookie,客户端可以配置为禁用cookie,在这种情况下,没有办法在客户端存储内容
  • 限制存储在cookie中的数据量(4kb)。
  • 每个请求都要传递cookie数据,所以每个请求都有重复的cookie数据,性能就不好了。

与每个域的cookie相比,网络存储有更多的数据存储量。这在客户端存储应用程序的本地数据,而不影响服务器性能。
作为HTML5的一部分,引入了两种存储方法。
本地存储存储在本地存储的数据没有过期机制。数据永远不会过期。即使浏览器关闭,数据也不会丢失。
会话存储(SessionStorage) 存储在会话存储(SessionStorage)中的数据有一个范围,当浏览器关闭时,会话数据将丢失,数据将被自动删除。

如何检查任何浏览器是否支持网络存储?
网络存储API继承了Window对象的两个属性Window.sessionStorage和Window.localStorage,这两个属性将提供对SessionStorage和LocalStorage的访问。这段代码需要在旧的浏览器中进行检查。如果没有支持,我们就必须使用cookie作为替代机制。

  
if(Window.sessionStorage){  
  
// Supports Session Storage  
}else { // support not aivalble  
}  

网络存储提供了不同的APIs方法和属性。不同的方法/访问器方法对两种存储类型都是一样的 属性 length - 返回存储在网络存储方法中的数据项的数量

方法:

描述

getItem():

传递键名并返回键的值

setItem():

保存键和值,如果键已经存在,更新现有键的值

removeItem():

传递键,从存储器中删除键和值

clear():

该方法删除整个缓存数据并清空它

keys():

传递数字,并返回该数字在存储器中的位置的键。

设置数据到网络存储器 setItem(key, value)方法用于将数据存储到存储器中。下面是一个将数据设置到localStorage的例子

const Emps = [  
  {  
    "id": "001",  
    "name": "John",  
  },  
  {  
    "id": "002",  
    "name": "Francis",  
  },  
  {  
    "id": "003",  
    "name": "Ram",  
  }  
]  
  
localStorage.setItem('empdata', JSON.stringify(Emps))  
const empdata = JSON.parse(localStorage.getItem('empdata'))  
console.log('Emps: ', empdata)  

要测试数据存储,请访问DevTools + Application tab + storage section

使用getItem('key')从网络存储中检索数据
从网络存储缓存中删除特定的键
要从网络存储中删除特定的数据,使用removeItem('key')
要从存储中删除整个数据
要从网络存储中删除所有数据,使用clear()

在Chrome浏览器中查看/测试存储数据:-

以下是步骤,你可以看到上面的截图,同样
1.打开开发者工具
2.选择应用程序标签
3.进入存储选项卡,你会看到其中的LocalStorage和SessionStorage。

在Firefox中查看/测试存储:-

在火狐浏览器中,你可以使用内置的火狐浏览器控制台或Firebug
来检查这些元素。在浏览器上点击右键或使用 "工具 "+"Web 开发者 "+"检查器 "进入 "检查元素 "选项
2.转到存储选项卡
3.你会看到不同的存储标签

修复网络存储的QUOTA_EXCEEDED_ERR?

我们曾经得到 "uncaught_error:QUOTA_EXCEED_ERROR",有时是由于数据存储容量超过了。

为了解决这个问题,我们有两种方法

  1. 删除或减少存储中的项目的大小
  2. 始终使用try/catch块进行异常处理以捕捉运行时的错误。
try {  
  sessionStorage.setItem('key', 'value');  
} catch (e) {  
  if (e == QUOTA_EXCEEDED_ERROR) {  
    console.log('Storage Limit is already full.');  
  }  
}