2017-01-30 24 views
1

我想在localStorage中保留多个记录。 存储和检索几个小数据或一个大数据是否更高效?localStorage:单独存储数据VS一个大字符串?

例如,这样的:

localStorage.setItem('id1', tally1); 
localStorage.setItem('id2', tally2); 

for(var i=0; i<tallyIds.length; i++){ 
    this.tallies.push(tallyIds[i], localStorage.getItem(tallyIds[i])); 
} 

或者这样:

localStorage.setItem('tallies', '[{"id1": tally1}, {"id2": tally2}"]'); 
this.tallies = JSON.parse(localStorage.getItem('tallies')); 

我知道有些设备会自动从localStorage的清除一些数据定期。因此,单独存储每一个可能是有利的,在这种情况下可能只有一些丢失 - 但是如果全部存储在一个大的字符串中,那么如果/当设备决定清除它时,全部丢失。

但是,循环遍历整个列表(只有几百个项目)会变慢吗?

+1

我做什么,是根据应用程序的需要和对每个服务我做不同的对象。每个对象都与一个服务有关。该服务负责存储和检索数据。我只是使用服务而不是getItem和setItem来管理localstorage。并且它将对象的大小最小化为需要一个服务。 – Shubhranshu

回答

1

几乎可以肯定,您应该更喜欢将数据存储为单个键下的数组。如果清除localStorage,则独立存储标签

a。不可能保存它们中的任何一个(cmd localStorage.clear(),例如将清除所有内容) b。可能会导致令人困惑的情况,如果您不确定所有数据是否完整无缺,或者只有一部分数据丢失。

另一方面,将数据存储为数组意味着您可以非常轻松地过滤,映射,排序和反转它们。

1

您的特定情况下,它可能会更容易储存在一个localStorage的键和值的 吻合(作为一个大的字符串) 和使用JSON解析重建 你的对象,添加到它,然后字符串化它再次,它将是 比分解每个计数器不同的键更容易。

如果你没有那么多的数据层,你真的需要一个真正的 本地数据库,如IndexedDB,那么对于这种情况,单个密钥和JSON字符串值可能是OK。

相关问题