我存储一个JSON对象,其中包括IndexedDB中的18张图像-每个图像最多50KB,但是以某种方式在indexedDB中需要118 MB? -我不知道为什么这么重?
除了图像之外,它们全都是纯JSON,主要是带有文本的键/值对...
查看随附的屏幕截图
Size of indexedDB
Item in IndexedDB
我正在使用DexieJS与IndexedDB一起工作
保存到数据库的函数如下所示:
export const savePendingSurvey = (id, currentSurvey, surveyAnswers, surveyFiles) => {
const updatedSurvey = {
id: id,
createdAt: new Date(),
status: 'UNSUBMITTED',
surveyVersion: currentSurvey.survey.version,
currentSurvey: {
...currentSurvey.survey
},
currentSurveyAnswers: [
...surveyAnswers
],
currentSurveyFiles: [
...surveyFiles
]
};
db.open().then(() => {
db.pendingSurveys.put(updatedSurvey).then((response) => {
console.log('done adding pending survey', response);
}).then(() => {
return db.pendingSurveys.toArray();
}).then((data) => {
console.log('pendings surveys in db', data);
}).catch((e) => {
if ((e.name === 'QuotaExceededError') ||
(e.inner && e.inner.name === 'QuotaExceededError')) {
// QuotaExceededError may occur as the inner error of an AbortError
alert('QuotaExceeded error! - There are not enough space available on your device');
} else {
// Any other error
console.error(e);
}
});
});
};
似乎每次我对对象进行最简单的更新,即使更改了简单的文本,每次都会在该项目上添加100-300kbs:/
最佳答案
Dexie问题604和641中也有类似的问题。似乎大多数IndexedDB的实现都像大多数数据库一样-它为每次更新添加新行,并将旧版本标记为以后删除。当数据库达到一定大小时,它将垃圾收集旧行。
关于javascript - IndexedDB为简单对象占用了大量空间,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58919561/