繁体   English   中英

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

[英]Best practise of using localstorage to store a large amount of objects

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

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

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

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

如果你想要一些简单的东西来存储大量的键/值,并且你不想担心这些类型,那么我推荐使用LocalForage 您可以存储字符串,数字,数组,对象,Blob,无论您想要什么。 它使用IndexedDB和WebSQL,因此存储限制远高于LocalStorage。

PouchDB也可以工作,但API更复杂,更适合在服务器上与CouchDB同步数据时。

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

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

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

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

localStorage有好的和坏的部分。

好的部分:

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

坏消息:

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

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

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

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

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

当然,根据您的项目规范,这种模式可能不是一个很好的方法来满足您的需求。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM