如何解决Firebase功能存储文件下载链接的生成需要时间
从firebase函数上载文件后,我正在生成一个签名的url,但它最多需要5秒钟的时间。我的主要工作在5秒钟内完成,但是链接生成为用户增加了更多等待时间。
这是我使用的功能:
function getSignedUrl(file) {
console.time('URLGenerated ');
/**
* Handle url generation url to properly handle user veiws
* Crete catch error to see if it is logged properly
*/
let options = { action: 'read',expires: Date.now() + 5 * 60 * 1000 }; // 5min Expiration Time
let bucketFileName = path.join(crypto.randomBytes(12).toString('hex'),path.basename(file));
return bucket.upload(file,{ destination: `public/${bucketFileName}` })
.then(() => {
return bucket.file(`public/${bucketFileName}`).getSignedUrl(options)
.then((urls) => {
fs.unlinkSync(file);
console.timeEnd('URLGenerated ');
return urls[0];
})
.catch((e) => {
console.log('Link Generation Error' + e);
});
}).catch((e) => console.log(e));
}
文件大小大约为200-350 KB。
上一代人花了3.5秒至关重要。
这是怎么回事?如何减少时间?
解决方法
此代码似乎通过同步的fs.unlinkSync
方法减慢了速度。因此,代码正在等待文件删除(引用here和here)。
据我了解,删除上载的文件对于链接生成并不重要,因此出于功能目的。问题是是否值得等待,我认为此操作(文件删除)可以在提供链接后调用的函数getSignedUrl
之外进行。
我会尝试在删除的fs.unlinkSync
上进行测试,并检查执行时间是什么。
您也可以使用函数unlink的异步版本,但是我认为更清晰的方法是在外部执行。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。