使用本地存储来存储大量对象的最佳实践

Best practise of using localstorage to store a large amount of objects

本文关键字:存储 对象 最佳      更新时间:2023-09-26

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

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

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

我想知道根据你的经验,哪种方式会更好?此外,是否值得尝试像PouchDB这样更复杂的客户端数据库?

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

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

如果你不想有很多密钥,你可以:

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

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

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

localStorage有好的部分也有坏的部分。

好零件:

  • 同步的
  • 速度极快,读取和写入都只是内存——即使在较弱的设备上,其吞吐量也超过100 Mb/s(例如,JSON.stringify通常比localStorage.setItem慢5-20倍)
  • 经过全面测试且可靠

坏消息:

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

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

所以localStorage适合缓存和日志。没有更多。

我个人并没有使用localStorage来管理这么多元素。

然而,我通常用于管理数据的模式是将完整的信息数据库加载到一个javascript对象中,在处理过程中在内存中进行管理,并在处理完成后再次将其保存到localStorage。

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

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

如果你的数据量非常高,那么在内存中管理它也可能是一个问题,然而,根据数据模型的不同,你可以将其构建为高效的结构,使你能够在需要的时候加载和保存数据。