我有一个Firefox插件,需要保留字符串数组。
字符串是简单的字符串-确切的文件名,例如:
11111.jpg
22222.gif
33333.jpg
44444.jpg
55555.png
此数组是动态的-我需要不时向其中添加项目,并删除一些。
我已经习惯了关系数据库,使用SQL查询来对数据执行操作,但是对于Firefox插件,似乎存储数据的方法是使用键值对。
因此,用于存储我的(动态增长/缩小)的数组,这是否意味着我需要将整个数组存储为键值对的值,然后每次我想从该数组添加/删除一个项目时,我需要:1)获取键值对,2)编辑阵列(在内存中),3)全部保存回存储区吗?
没有比阅读所有内容,进行小的更改然后再次保存所有内容更好的方法吗?
将数组存储在一个键下,对其进行读取,更新,在同一键下进行写入是使用扩展存储API的唯一直接方法。
[如果您发现它在Firefox探查器中明显变慢,则可以重新组织数据,以便将其存储在较小的存储桶中。您甚至可以在扩展存储API上进行自己复杂的db模仿,该API将单独存储每个值并保留一个index
键列出每个值,因此除了写入单个值外,您将只对该索引进行完整的更新本身。索引甚至可以成块或使用其他高级结构。也许甚至有一个现有的库。
您可以在后台脚本(或除内容脚本以外的任何其他扩展脚本)中使用诸如IndexedDB之类的DOM存储,它提供了一些适当的数据库功能,但可靠性不高,因为许多用户b)在设置为全局私有模式或禁用cookie时,Firefox将禁用扩展内的DOM存储。c)扩展中的IndexedDB已知存在导致数据丢失的无法解释的错误。像PouchDB这样的库在这里将非常有帮助。