使用JSON对象与localStorage / sessionStorage / IndexedDB / WebSQL /等。

时间:2014-02-16 06:23:53

标签: javascript json browser cross-browser local-storage

我有一个网络应用程序,可以在启动时获取几十个项目。所有这些项目都是JSON,小于1kb。

现在有许多存储选项,如问题所示。

我在考虑将这些对象存储在浏览器JS中的变量中。我真的不明白为什么我要使用这些浏览器存储?

那么使用任何基于浏览器的存储而不是JS中的变量是什么原因。 可能是从某个数据大小开始,最好使用浏览器存储,例如,从100kb开始,最好不要使用JS变量。

var myModel = {}

注意

每次用户进入应用程序时,他都会从服务器获取新鲜内容。内容对于缓存来说太实时了。      `

2 个答案:

答案 0 :(得分:9)

localStorageglobalStoragesessionStorage

这些功能已在已实现“Web存储”的浏览器中准备就绪,它们都引用了一种HashMap,即字符串键和字符串值之间的映射。但生活是不同的。关闭活动页面后,sessionStorage将被清除,但localStorage是永久性的。(MDN DOM Storage guide

  • 有一点关于 globalStorage ,这是自Gecko 1.9.1(Firefox 3.5)以来已经过时并且自Gecko 13(Firefox 13)以来不受支持,从那以后我们应该使用{{1} }。这两者之间的区别只是HTML5范围支持(方案+主机名+非标准端口)。

这些对您有用:

- 在您网站的不同网页之间共享您的对象。

- 离线编程。

加载大型对象

- 或者只要您需要本地持久存储空间


<强>索引资料

  

IndexedDB对于存储大量数据的应用程序(例如,借阅库中的DVD目录)和不需要持久Internet连接的应用程序非常有用(例如,邮件客户端,待办事项列表和记事本)

根据MDN的这句话,您可以轻松找到关于使用localStorage的答案,如果您不知道IndexedDB是否对您有用,请回答以下问题:< / p>

您是否在客户端存储了大量数据?如果是,请考虑使用它。

您的应用是否需要启用离线功能?如果是,请考虑使用IndexedDB。

您的应用是否需要持久的互联网连接?如果是,则根据其他因素,它仍然是一个选项。


因此,除了你不需要它以外的工作,我猜,因为正如你所说:

  

内容对于缓存来说太实时了。

它们具有一些功能,如共享对象和管理大量数据,您应该自行决定。

答案 1 :(得分:2)

localStorage和sessionStorage正在解决缓存问题;把它们想象成饼干。你说你不想要缓存,所以你可以忽略它们。

JavaScript对象的行为基本上类似于O(1)查找表(请参阅How is a JavaScript hash map implemented?,并确保您同时阅读前两个答案,因为两者都有一些有用的内容),并且没有最大内存限制我知道,或者另一个解决方案成为更好的选择

我能想到你应该为在IndexedDB中插入数据的额外步骤而烦恼的唯一原因是,如果你需要在不是你正在使用的对象键的字段上进行O(1)查找。