在一个简单的Todo应用程序中,假设我们有一个todo列表数组,应该将其存储在localStorage中。

var todoList=[{id:1,text:'todo1'},{id:2,text:'todo2'}]


要将数组存储在locaStorage中,必须对其进行字符串化,并存储为对象键值。

问题是,假设我有一个包含10000个待办事项的待办事项数组,每次存储数组时都必须对整个数组进行字符串化吗?有没有一种方法可以只存储更改,并将其与当前项目合并?

我曾尝试直接修改localStorage项目,例如:

//this will replace last occurence of ] with new stringified object + ]
localStorage.todos.(/]$/, "new stringified object"+']')


但它不会修改localStorage中的原始对象,换句话说,您只能使用setItem()方法设置localStorage项目。

最佳答案

最好仅将localStorage视为一种持久性机制,理想情况下,不要将其保留为正在使用的数据。在幕后,它只是一个键/值存储,其中的值始终是字符串,因此不可避免地要对整个值进行字符串化。

坦率地说,将10,000个项目数组化对性能的影响可以忽略不计(一个O(n)操作),因此无论如何我都不必担心,但是如果您想从应用程序中挤出所有最后的性能,那么我只会在必要时保留您的数据,而不是在每次修改后都保留。使用内存副本处理待办事项列表,然后在完成后对其进行字符串化。

关于javascript - localStorage使用情况优化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36519340/

10-13 04:16