使用localstorage存储大量对象的最佳实践

时间:2015-07-01 09:43:55

标签: javascript html5 local-storage pouchdb

目前我正在尝试使用localStorage存储大量相同类型的对象,我感到有些困惑。

一种思维方式是将所有对象存储在数组中。但是,对于每个读取/写入单个对象,我需要对整个数组进行反序列化/序列化。

另一种方法是将每个对象的密钥直接存储在localStorage中。这将使访问每个对象变得更容易,但我担心将存储的对象数量(数万)。此外,获取所有对象将需要迭代整个localStorage!

我想知道哪种方式会更好?此外,是否值得尝试更复杂的客户端数据库,如PouchDB?

3 个答案:

答案 0 :(得分:4)

< p>如果您想要存储大量键/值的简单内容,并且您不想担心类型,那么我建议< a href =" https:/ /github.com/mozilla/localforage"的rel =" nofollow的"> LocalForage< / a取代。您可以存储字符串,数字,数组,对象,Blob,无论您想要什么。它使用了IndexedDB和WebSQL,因此< a href =" http://pouchdb.com/faq.html#data_limits" rel =" nofollow">存储限制< / a>远远高于LocalStorage。< / p> < p> PouchDB也可以使用,但API更复杂,而且当您想要在服务器上与CouchDB同步数据时,它更适合。< / p>

答案 1 :(得分:2)

如果您不想拥有很多按键,可以:

  • 使用\n连接JSON并将它们存储为单个键
  • 构建并更新存储在单独密钥下的索引,每个密钥都链接一些具有特定行号的密钥。

在这种情况下,解析行只是.split('\n'),比JSON.parse快〜2个数量级。

请注意,您可能需要特别努力同步同时打开的标签页。在复杂的情况下,这可能是一个挑战。

localStorage有好的和坏的部分。

好的部分:

  • syncronous;
  • 非常快,读取和写入都只是memcpy - 即使在弱设备上也是100 + Mb / s吞吐量(例如JSON.stringify通常是5-20倍更慢localStorage.setItem);
  • 经过彻底测试和可靠。

坏消息:

  • 没有交易,因此您需要工程工作来同步标签;
  • 认为你不超过2Mb(因为存在具有此限制的系统);
  • 2Mb的存储空间实际上意味着可以节省1M个字符。

这些点显示了localStorage作为数据库的适用性的边界。 LS适用于需要同步性和速度的任务,以及可以修剪DB以适应配额的任务。

因此localStorage适用于缓存和日志。不多了。

答案 2 :(得分:1)

我没有亲自使用localStorage来管理这么多元素。

但是,我通常用来管理数据的模式是将完整的信息数据库加载到javascript对象中,在进程期间在内存中管理它,并在进程完成时再次将其保存到localStorage。

当然,根据您的项目规范,这种模式可能不是您需要的好方法。

如果您需要不断保存数据,数据访问可能会成为一个问题,因此可能使用某种类型的小型数据库访问是一个更好的选择。

如果您的数据量非常高,那么在内存上管理它也可能是一个问题,但是,根据数据模型,您可以将其构建为可以加载和保存的高效结构数据就在需要的时候。