我有一个应用程序,它使用vanilla JavaScript来显示openlayersMap,人们点击一个位置就可以添加图片。我使用Dexie JS在页面之间存储数据,直到用户准备好发送所有内容。上传所有内容后,记录将被删除。
但Edge和Chrome在桌面和移动终端上不断崩溃。这似乎与IndexedDB太大有关。
有一个保存细节的“主”记录和一个保存图像的“相关”表。
要添加一个记录,这是我的代码:
export const AddRecord = async (tablename, data) => {
let table = db.table(tablename);
let added = await table.add(data);
return added;
}
字符串
要删除记录,这是我的代码:
export const DeleteRecord = async (tablename, id) => {
let table = db.table(tablename);
let deleted = await table.delete(id);
return deleted;
}
型
但这不是真正的问题。一切都被执行,上传后,记录被删除。但是indexedDB不断占用空间
我清除了所有数据,从这个开始
的数据
我添加了一条包含id和三个字段的记录
的
存储空间已经增加了3MB,这对于一条记录来说似乎很大。但这并不重要,因为无论如何,所有内容都会被删除
的
但是在上传了25张图片(大小在1.5MB到2.5MB之间)之后,我得到了这个结果
的
我用来存储数据的表是空的。是什么占据了空间?我是否需要“清除”来完全删除所有剩余的数据?
1条答案
按热度按时间sbdsn5lh1#
您描述的内容似乎与索引大型ArrayBuffer时发生的情况类似-请参阅https://dexie.org/docs/Version/Version.stores()#warning
根据你的描述,我看不出你是如何索引表的,但如果是这种情况,解决方案是不要索引大型ArrayBuffers或Uint 8Arrays等。只索引您要在
where
查询中使用的字段-其他属性可以在不索引的情况下添加。例如,假设你已经这样声明了你的Dexie:
字符串
然后,如果你让添加图像如下:
型
...那么这将使数据库不得不创建大量的“图像”索引数据沿着图像数据。
对相关表建立索引的正确方法更像是:
型
记住,dexie并不强制您列出
version().stores()
中的所有属性,而只列出您需要查询的属性。