Firebase存储的getMetaData()是否会调用后端(从而引入一个小延迟)?

时间:2018-01-05 08:12:50

标签: ios swift firebase-storage

我目前使用以下(Swift 4)代码下载存储在Firebase存储中的图像:

func getImage(completion: @escaping (UIImage?)->()) {
    let ref = Storage.storage().reference().child("myImage.jpg")
    ref.getMetadata() {
        (metadata, error) in
        guard let url = metadata?.downloadURLs?.first, error == nil else {
            print(String(describing: error))
            completion(nil)
            return
        }
        //got url download image here and return it
        //this function is not important but it does it asynchroniously
        func downloadImageOrReturnACachedVersionOfItBy(url, completion)
    }

即使downloadImageOrReturnACachedVersionOfItBy(...)实际负责图片兑现,我也注意到下载图片时出现了相当大的延迟

问题:

  1. 函数getMetadata()每次调用时都会联系后端吗? 因此,这可以引入往返Web服务调用延迟吗?

  2. 如果是这样的话......为了避免这种情况,在上传图片时,存储返回的网址是一个好主意,是否会在应用中本地Firebase putData()的元数据中返回?这些下载网址终身是否已修复?是否会以某种方式自动失效?

1 个答案:

答案 0 :(得分:0)

  

1)函数getMetadata()每次都会联系后端   叫什么名字?因此,这可以引入一个往返Web服务调用   延迟?

是的,这是因为下载网址可能已更改(例如开发者已撤消),因此我们需要再次提取。

请注意,我们有downloadURL() method执行相同的操作,但您无需手动解析元数据。

  

2)如果是这样......为了避免这种情况,将退回的商店存储起来是个好主意   url,上传图片时,从元数据中返回   Firebase putData()在应用程序中本地?这些下载网址是否已修复   终身?是否会以某种方式自动失效?

我建议使用FirebaseUI integration with SDWebImage,它会自动缓存并显示这些图片。

// Reference to an image file in Firebase Storage
let reference = storageRef.child("images/stars.jpg")

// UIImageView in your ViewController
let imageView: UIImageView = self.imageView

// Placeholder image
let placeholderImage = UIImage(named: "placeholder.jpg")

// Load the image using SDWebImage
imageView.sd_setImage(with: reference, placeholderImage: placeholderImage)