小编给大家分享一下浏览器中的不同存储类型有哪些,希望大家阅读完这篇文章后大所收获、下面让我们一起去探讨吧!
在后端开发中,存储是工作的常见部分。应用程序数据存储在数据库中,文件存储在对象存储中,瞬态数据存储在高速缓存中……似乎存在无限种存储任何类型数据的可能性。但是,<强>数据存储不仅限于后端>强,前端(浏览器)还具有许多存储数据的选项。我们可以通过利用这种存储方式来提升我们的应用性能,保存用户的偏好,在多个会话,甚至不同的计算机上保持应用状态。
在本文中,我们将通过不同的可能性在浏览器中存储数据。我们将涵盖每种方法的三个用例,以掌握其利弊。最后,你将能够决定什么存储是最适合你的用例。
让我们开始吧!
localStorage API
<代码> localStorage> 代码是浏览器中最受欢迎的存储选项之一,也是许多开发人员的首选。数据跨会话存储,从不与服务器共享,并且可用于同一协议和域下的所有页面。存储空间限制为?5 mb。
令人惊讶的是,谷歌铬团队并不建议使用这个选项,因为它屏蔽了主线程,而且web工人和服务人员无法访问。他们推出了一个实验:KV存储,作为一个更好的版本,但这只是一个试验,似乎还没有任何进展。
<代码> 代码> localStorage API可作为<代码>窗口。localStorage> 代码使用,并且只能保存utf - 16字符串。在将数据保存到本地文件<代码> 代码>之前,我们必须确保将其转换为字符串。主要的三个功能是:
- <李> <代码> setItem(& # 39;关键# 39;,代码> <代码> & # 39;价值# 39;)代码> 李> <李> <代码> getItem(& # 39;关键# 39;)代码> 李> <李> <代码> removeItem(& # 39;关键# 39;)代码> 李>
它们都是同步的,因此使用起来很简单,但是它们会阻塞主线程。
值得一提的是,<代码> localStorage> 代码有一个称为sessionStorage <代码> 代码>的双胞胎。唯一的区别是,存储在sessionStorage <代码> 代码>中的数据将仅持续当前会话,但API相同。
这个太简单了,相信大家都用过。
IndexedDB IndexedDB API是浏览器中的现代存储解决方案。它可以存储大量的结构化数据,甚至文件和Blob。和每一个数据库一样,IndexedDB对数据进行索引,以便高效地运行查询。使用IndexedDB比较复杂,我们必须创建一个数据库、表,并使用事务。
与<代码> localStorage> 代码相比,IndexedDB需要更多代码。在例子中,我使用了原生API与承诺包装器,但我强烈建议使用第三方库来帮助你。我推荐的是localForage,因为它使用了同样的<代码> localStorage> 代码API,但实现方式是逐步增强的,也就是说,如果你的浏览器支持IndexedDB,就会使用它,如果不支持,就会退回到<代码> localStorage> 代码。
让我们来编写代码,前往我们的用户偏好示例吧!
& lt;输入类型=癱heckbox"id=癲arkTheme"name=癲arkTheme">让数据库; 功能开关(){ 如果(){ document.documentElement.classList.add(& # 39;黑暗# 39;); 其他}{ document.documentElement.classList.remove(& # 39;黑暗# 39;); } } 异步函数保存(){ const tx=db.transaction(& # 39;偏好# 39;& # 39;读写# 39;); 常量存储=tx.objectStore(& # 39;偏好# 39;); 商店。把({关键:& # 39;darkTheme& # 39;,价值:alt="浏览器中的不同存储类型有哪些"><代码> idb 代码>是我们使用的承诺包装器,而不是使用基于事件的低级API。首先要注意的是,对数据库的每次访问都是异步的,这意味着我们不会阻塞主线程,与<代码> localStorage> 代码相比,这是一个主要优势。
我们需要打开与数据库的连接,以便在整个应用程序中都可以使用它进行读写。我们给数据库起一个名字<代码> my-db> 代码,一个模式版本<代码> 1> 代码,以及一个更新函数,以在版本之间应用更改,这与数据库迁移非常相似,我们的数据库架构很简单:只有一个对象存储<代码> preferences> 代码.object商店等效于SQL表,要写入或读取数据库,必须使用事务,这是使用IndexedDB的乏味部分。看一下演示中新的<代码>保存代码>和<代码> 代码加载功能。
毫无疑问,IndexedDB具有更多的开销,并且与<代码> localStorage> 代码相比,学习曲线更陡峭。对于键值的情况,使用<代码> localStorage> 代码或第三方库可能更有意义,它们将帮助我们提高效率。
& lt; p id=發oading"在加载…& lt;/p> & lt; ul id=發ist"祝辞 & lt;/ul>浏览器中的不同存储类型有哪些