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-350KB。

上一代花了3.5秒,这很关键。

怎么回事?如何减少时间?

此代码似乎被同步的fs.unlinkSync方法减慢了速度。因此,代码正在等待文件删除(此处和此处引用(。

根据我的理解,删除上传的文件对链接生成并不重要,因此不符合功能目的。问题是是否值得等待,我认为这个操作(文件删除(可以在提供链接后调用的函数getSignedUrl之外完成。

我会尝试使用删除的fs.unlinkSync进行测试,并检查是否有执行时间。

您也可以使用异步版本的函数unlink,但我认为更清楚的是在外部执行。

最新更新