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

Wud*_*ong 8 javascript html5 local-storage pouchdb

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

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

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

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

小智 3

如果您不想拥有很多钥匙,您可以:

\n\n
    \n
  • 连接行 JSON 并将\\n它们存储为单个键
  • \n
  • 构建和更新存储在单独键下的索引,每个索引将某个键与特定行号链接起来。
  • \n
\n\n

在这种情况下,解析行的速度大约.split('\\n')快 2 个数量级JSON.parse

\n\n

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

\n\n

localStorage 有好的一面也有坏的一面。

\n\n

好的部分:

\n\n
    \n
  • 同步的;
  • \n
  • 速度极快,读取和写入都只是 memcpy \xe2\x80\x93 it\xe2\x80\x98s 100+Mb/s 吞吐量,即使在弱设备上也是如此(例如,通常比JSON.stringify5-20 倍);localStorage.setItem
  • \n
  • 经过彻底测试且可靠。
  • \n
\n\n

坏消息:

\n\n
    \n
  • 没有事务,因此您需要工程工作来同步选项卡;
  • \n
  • 认为您的内存不超过 2Mb(因为存在有此限制的系统);
  • \n
  • 2Mb 存储实际上意味着您可以保存 1M 个字符。
  • \n
\n\n

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

\n\n

所以localStorage适合缓存和日志。不多。

\n