Firefox 附加组件:存储随时间变化的数组的最佳方式是什么?

Firefox Add-on: What is the Best Way to Store an Array that Changes thru Time?

我有一个需要保留字符串数组的 Firefox 插件。

字符串是简单的字符串 - 确切地说是文件名,例如:

11111.jpg
22222.gif
33333.jpg
44444.jpg
55555.png

这个数组是动态的 - 我需要不时地向它添加项目,并删除一些。

我习惯使用关系数据库,使用 SQL 查询对数据执行操作,
但是对于Firefox Add-on来说,存储数据的方式似乎是使用Key-Value对。

所以为了存储我的(动态growing/shrinking)数组,
这是否意味着我需要将整个数组存储为键值对的值,
然后每次我想Add/Delete那个数组中的一个项目时,我需要:
1) 获取键值对,
2)编辑数组(在内存中),
3) 全部存回存储区?

难道没有比阅读所有内容、进行小改动,然后再次保存所有内容更好的方法吗?

在一个键下存储数组,在同一个键下读取、更新、写入是使用扩展存储的唯一直接方法API。

如果您发现它在 Firefox 分析器中明显变慢,您可以重新组织数据,以便将其存储在较小的存储桶中。您甚至可以在扩展存储 API 之上制作您自己的复杂数据库模仿,它将单独存储每个值并保留一个列出每个值的 index 键,这样您只需对该索引执行完整更新除了编写单个值本身。索引甚至可以成块或使用其他高级结构。也许甚至还有一个现有的图书馆。

您可以在后台脚本(或除内容脚本之外的任何其他扩展脚本)中使用像 IndexedDB 这样的 DOM 存储,它提供了一些适当的数据库功能,但它不太可靠,因为许多用户 a)使用各种清洁器也清除 DOM 扩展内的存储,b) Firefox 在设置为全局私有模式或禁用 cookie 时禁用扩展内的 DOM 存储,c) 扩展中的 IndexedDB 已知有莫名其妙的导致数据丢失的错误。像 PouchDB 这样的库在这里会很有帮助。