在一个简单的Todo应用程序中,假设我们有一个todo列表数组,应该存储在localStorage中。
var todoList=[{id:1,text:'todo1'},{id:2,text:'todo2'}]
要将数组存储在locaStorage中,必须对其进行字符串化,并将其存储为Object键值。
问题是,假设我有一个包含10000个项目的待办事项数组,每次存储数组时是否必须对整个数组进行字符串化?有没有这种方法只存储更改,并将其与当前项目合并?
我尝试过直接修改localStorage项目,如:
//this will replace last occurence of ] with new stringified object + ]
localStorage.todos.(/]$/, "new stringified object"+']')
但它并没有修改localStorage中的原始对象,换句话说,你只能使用setItem()方法设置localStorage项。
答案 0 :(得分:1)
最好只将localStorage
视为持久性机制,理想情况下不是保留您正在积极处理的数据的地方。在幕后,它只是一个键/值存储,其值始终是一个字符串,因此字符串化整个值是不可避免的。
坦率地说,对10,000个项目进行字符串化的性能影响可以忽略不计(An O(n)操作),所以无论如何我都不会担心它,但如果你想挤压每一个最后一点性能超出了你的应用程序,那么我只会在必要时保留你的数据,而不是在每次修改之后。使用内存中的副本处理您的待办事项列表,然后在完成后对其进行字符串化。