我想在localStorage中保留多个标签。存储和检索多个小数据或一个大数据是否更有效?
例如。这个:
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中的一些数据。因此,单独存储每一个可能是有利的,在这种情况下可能只有一些会丢失 - 但如果存储在一个大字符串中,那么如果/当设备决定清除它时,一切都会丢失。
但是,循环遍历整个列表(只有几百个项目)会慢一些吗?
几乎可以肯定,您应该更喜欢将标签存储为单个键下的数组。如果清除localStorage,则独立存储标签
一个。不可能保存其中任何一个(cmd localStorage.clear(),例如将清除所有内容)b。可能会导致令人困惑的情况,在这种情况下,您不确定您的所有数据是否完好无损或只有部分数据丢失。
从好的方面来说,将标签存储为数组意味着您可以非常轻松地对其他操作进行过滤,映射,排序和反转。
对于您的特定情况,可能更容易将标签存储在一个localStorage键和值(作为一个大字符串)并使用JSON解析来重建您的对象,添加它,然后再次对其进行字符串化。将每个标签拆分为不同的键比将它拆分更容易。
如果你没有这么多数据层,你真的需要一个真正的本地数据库,比如IndexedDB,那么在这种情况下,单个键和JSON字符串值可能就OK了。