【问题标题】:Using a JSON object vs. localStorage/sessionStorage/IndexedDB/WebSQL/etc.?使用 JSON 对象与 localStorage/sessionStorage/IndexedDB/WebSQL/等?
【发布时间】:2014-03-15 12:11:13
【问题描述】:

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

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

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

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

var myModel = {}

注意

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

【问题讨论】:

  • 您提到内容需要一直保持新鲜,那您为什么要考虑存储或缓存呢?您实际上是在浪费带宽,为什么不从返回 json 的 web 服务中获取?
  • 我只是在扩大我的理解。我现在知道我不需要这些了!

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


【解决方案1】:

localStorageglobalStoragesessionStorage

这些特性在已经实现“Web Storage”的浏览器中已经准备好了,它们都是指一种HashMap,一种字符串键和字符串值之间的映射。但生活是不同的。一旦活动页面关闭,sessionStorage 将被清除,但 localStorage 是永久的。(MDN DOM Storage guide)

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

这些可能对您有用:

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

-离线编程。

-缓存大对象

-或者当您需要本地持久存储时。


索引数据库

IndexedDB 适用于存储大量数据的应用程序(例如,借出图书馆中的 DVD 目录)和 不需要持续互联网连接即可工作的应用程序(例如,邮件客户端、待办事项列表和记事本)

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

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

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

您的应用是否需要持续的互联网连接?如果是,它仍然是一个选项,具体取决于其他因素。


所以除了你不需要离线工作之外,我猜,因为正如你所说:

内容太实时,无法缓存。

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

【讨论】:

  • 为什么我之前不知道 sessionStorage?它就像我所有网站页面的超级全局变量。这可以帮助我完成很多事情。感谢您的信息。 .
  • 即使这不是答案。这是对问题中使用的不同浏览器存储的一个很好的解释!
【解决方案2】:

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

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

我认为您应该费心在 IndexedDB 中插入数据的额外步骤的唯一原因是,如果您需要在不是您使用的对象键的字段上进行 O(1) 查找。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-21
    • 2019-06-25
    • 2014-09-10
    • 2011-03-10
    • 2012-04-19
    • 2017-03-06
    • 2015-07-09
    • 2011-12-02
    相关资源
    最近更新 更多