使用本地存储来存储大量对象的最佳实践
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
连接行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。
当然,根据您的项目规范,这种模式可能不是满足您需求的好方法。
如果您需要不断地保存数据,那么数据访问可能会成为一个问题,因此使用某种类型的小型数据库访问可能是一个更好的选择。
如果你的数据量非常高,那么在内存中管理它也可能是一个问题,然而,根据数据模型的不同,你可以将其构建为高效的结构,使你能够在需要的时候加载和保存数据。
- 访问存储对象
- 在 Jquery 中,我可以存储对象引用并在以后使用它吗?
- 在JSON中存储对象引用
- 在外部JSON文件中存储对象数组
- 如何使用 json.stringify 在 cookie 中正确存储对象数组
- 将数据追加到本地存储对象
- 在 Javascript 中存储对象的当前状态的最佳实践是什么?
- 在 chrome.storage 中正确存储对象
- 存储对象事件的内容
- 本地存储对象数组:仅将新对象推送到数组中(如果唯一)
- jQuery选择器存储对象?如何强迫它不这样做
- 如何在 html5 的本地存储对象中存储数组
- 基于另一个对象键/值存储对象值
- JavaScript:如何在数组中存储对象
- 用于在javascript中存储对象的类型化数组
- 我可以将javascript存储在本地存储对象中并运行它吗
- 如何在HTML元素中存储对象引用
- 如何使用jQuery$.cokie()在cookie中存储对象数组
- 如何在JavaScript中访问和存储对象数组
- 是否有一个好的方法来存储对象的引用