gpt4 book ai didi

javascript - 当我们保存少量附件时,如何提高 PouchDB 的性能?

转载 作者:行者123 更新时间:2023-12-03 06:58:38 24 4
gpt4 key购买 nike

最近在研究PouchDB,因为我们的项目可能会用到它,我做了一些调查,发现在保存很多附件时,会花费很多时间。

现在我有一个要求:将30M大小 png文件保存为文档的附件。我尝试了两种方法来解决这个问题,但都不是完美的,我们如何提高我的函数的性能?

1.同时保存这些文件,大约需要71237ms:

function saveImage(imgSource30M2) {
var blob = base64toBlob(imgSource30M2, 'image/png', 1024);
imgSoucrce30m = blob;
var t1 = new Date();
db.put({
_id: 'my0112doc',
_attachments: {
'myattachment.png': {
content_type: 'image/png',
data: blob
},
'myattachment2.png': {
content_type: 'image/png',
data: blob
},
'myattachment4.png': {
content_type: 'image/png',
data: blob
},
'myattachment5.png': {
content_type: 'image/png',
data: blob
},
'myattachment3.png': {
content_type: 'image/png',
data: blob
}
}
}, (err, doc) => {
var t2 = new Date();
console.log("save in pouchdb timeoff:", t2.getTime() - t1.getTime());
});
}

2.将这些文件逐一保存,这样会比较花时间,大约需要226221ms。

const t11=new Date();

function addNewDoc(imgSoucrce30m) {
var blob = imgSoucrce30m;
addAttachment(5, blob, t11);
}

function addAttachment(counter, blob, t1) {
var nameImg = counter + '.png';
db.get('my0112doc', function(err, doc) {
if (err) {
return console.log(err);
}
db.putAttachment('my0112doc', nameImg,doc._rev ,blob, 'text/plain', function(err, res) {
if (err) {
return console.log(err);
}
if (counter >= 0) {
addAttachment(counter - 1, blob);
}
if(counter < 0 ){
var t2=new Date();
console.log("for loop save in pouchdb timeoff:", t2.getTime() - t11.getTime());
}
});
})

}

最佳答案

  1. base64ToBlob()对于如此庞大的数据来说,可能是一个非常昂贵的操作。如果您可以直接使用 Blob(例如,通过 <input type="file"> 中的 File 对象,那么您应该
  2. 在 Chrome 43+ 中,PouchDB 按原样将 Blob 直接存储到 IndexedDB,因此这可能是您将在性能方面看到的最佳体验(Safari 和旧版 Chrome 速度较慢)
  3. 您可能希望将 Blob 分解为许多更小的 Blob。另一个技巧是使用多个 PouchDB,然后并行地将 Blob 写入它们 - 这样,IndexedDB 就可以在幕后并行化,因为它们是单独的 IndexedDB 数据库。

否则,很难说你应该做什么,因为可能只是将 100MB 的 Blob 写入 IndexedDB 会非常慢,而且除了向用户展示之外,你没有其他解决方案加载微调器(在这种情况下请务必使用 Web Worker,这样就不会 block the DOM 。)

关于javascript - 当我们保存少量附件时,如何提高 PouchDB 的性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37159186/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com