Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 此IndexedDB代码中的什么导致设备存储空间达到1.6GB?_Javascript_Indexeddb - Fatal编程技术网

Javascript 此IndexedDB代码中的什么导致设备存储空间达到1.6GB?

Javascript 此IndexedDB代码中的什么导致设备存储空间达到1.6GB?,javascript,indexeddb,Javascript,Indexeddb,我们的应用程序利用IndexedDB跟踪一段时间内的数据清点。在应用程序使用数月后,似乎存在某种存储泄漏,导致设备上需要1.6 GB存储的数据量相对较小 该应用程序有一项功能,可以将其完整数据作为ZIP文件下载,并且该文件小于50KB。因此肯定有长期泄漏的地方。我们现在正在尝试的是下载数据、清除存储并重新导入,以跟踪泄漏的位置 但是,查看以下与IndexedDB交互的代码,我并不清楚泄漏的位置: //初始化数据库 if(!dbengine){ dbengine=this; var请求=win

我们的应用程序利用IndexedDB跟踪一段时间内的数据清点。在应用程序使用数月后,似乎存在某种存储泄漏,导致设备上需要1.6 GB存储的数据量相对较小

该应用程序有一项功能,可以将其完整数据作为ZIP文件下载,并且该文件小于50KB。因此肯定有长期泄漏的地方。我们现在正在尝试的是下载数据、清除存储并重新导入,以跟踪泄漏的位置

但是,查看以下与IndexedDB交互的代码,我并不清楚泄漏的位置:

//初始化数据库
if(!dbengine){
dbengine=this;
var请求=window.indexedDB.open(“DB”,1);
request.onerror=函数(事件){
抛出新错误(“打开indexedDb时出错”)
};
//这将在第一次创建模式
request.onupgradeneeded=(事件)=>{
event.target.result.createObjectStore(“db”,{keyPath:'id'});
};
request.onsuccess=(事件)=>{
dbengine.db=event.target.result;
var dbReadyEvent=newcustomevent('db-ready',{});
文件调度事件(dbReadyEvent);
dbengine.db.onerror=函数(事件){
抛出新错误(“数据库错误:+event.target.errorCode”);
};
dbengine.db.onabort=函数(事件){
抛出新错误(“数据库中止:“+event.target.Error”);
//这是为我们调用的错误-quotaExceedeError
};
};
}//如果!数据库引擎
var initialTransaction=dbengine.db.transaction(['db'],'readwrite');
initialTransaction.onabort=(事件)=>{
var error=event.target.error;//doError
警报(错误名称);
}//奥纳博特
initialTransaction.objectStore('db').openCursor().onsuccess=(事件)=>{
var cursor=event.target.result;
如果(光标){
this.encryption.loadIdentity((成功)=>{
如果(成功){
这个.loadDb(()=>{
dispatchEvent(新的CustomEvent('api-ready',{}));
setInterval(this.syncDb.bind(this),this.syncInterval);
这是syncDb();
});
}否则{
dispatchEvent(新的CustomEvent('api-fail',{}));
}
});
}否则{
initialTransaction.objectStore('db')。添加({
/* [...] */
});
document.dispatchEvent(新的CustomEvent('db-created',{}));
}//if/else游标
}; // 对象存储
loadDb(回调){
这一点符合[];
这个。_collections=[];
var dbStore=dbengine.db.transaction(['db'],'readwrite').objectStore('db');
dbStore.get(1).onsuccess=(事件)=>{
var result=event.target.result;
变量计数=结果计数;
如果(result.talles.length!==0){
计数=此。\加密.解密(结果.计数);
}
每小时计数((t)=>{
/* [...] */
}));
var collections=result.collections;
如果(collections.length!==0){
collections=this.\u encryption.decrypt(result.collections);
}
集合。forEach(((c)=>{
/* [...] */
}));
回调函数()
}
}//loadDb
注销(){
var dbStore=dbengine.db.transaction(['db'],'readwrite').objectStore('db');
var请求=dbStore.get(1);
request.onsuccess=函数(e){
删除e.currentTarget.result.identity;
dbStore.put(例如currentTarget.result);
重定向至(“欢迎”);
};
}//注销
syncDb(){
var tallyDataString=JSON.stringify(this.talls);
var collectionDataString=JSON.stringify(this.collections);
var encryptedTallyDataString=this.\u encryption.encrypt(tallyDataString);
var encryptedCollectionDataString=this.\u encryption.encrypt(collectionDataString);
var dbStore=dbengine.db.transaction(['db'],'readwrite').objectStore('db');
dbStore.get(1).onsuccess=(事件)=>{
var数据=event.target.result;
if(data.talles!==encryptedTallyDataString){
data.talles=encryptedTallyDataString;
dbStore.put(数据);
}
if(data.collections!==encryptedCollectionDataString){
data.collections=encryptedCollectionDataString;
dbStore.put(数据);
}
var syncEvent=new CustomEvent('sync',{});
文件调度事件(syncEvent);
}//成功
dbStore.get(1.onabort=(事件)=>{
var error=event.target.error;//doError
//如果(error.name='quotaeExceedeError'){
//警报('同步失败。超出配额')
// }
警报(错误名称);
}//奥纳博特
}//syncDb
loadIdentity(回调){
var dbStore=dbengine.db.transaction(['db'],'readwrite').objectStore('db');
dbStore.get(1).onsuccess=(事件)=>{
var result=event.target.result;
如果(!result.identity | | |!result.identity.publicKey | |!result.identity.privateKey){
如果(window.location.pathname!==“/app/welcome/”){
重定向至(“欢迎”);
}
}
此参数。标识={
/* [...] */
};
var solid=false;
if(result.identity.publicKey&&result.identity.privateKey){
实=真;
}
回调(实心);
};
}//加载标识
setIdentity(标识、用户名){
var dbStore=dbengine.db.transaction(['db'],'readwrite').objectStore('db');
var getRequest=dbStore.get(1);
getRequest.onsuccess=(事件)=>{
var result=event.target.result;
result.identity={
/* [...] */
};
这个。身份=身份;
var请求=dbStore.put(结果);
}//获取请求

}//setIdentity
你能用它来针对Chrome提交一个bug,让开发者看看吗?您可能遇到了浏览器错误。(我们最近发现了一个BLOB漏洞;不清楚您的代码是否使用BLOB作为数据块或内联数据)@JoshuaBell感谢您的评论。看起来就像这里描述的问题:这里:@JoshuaBell,我不知道我是否在使用Blob。是吗?“我怎么才能找到答案呢?”乔舒贝尔最后问,有解决办法吗?:)BLOB将是明确的