繁体   English   中英

iOS - Firebase存储下载速度非常慢

[英]iOS - Firebase storage download very slow

我正在为我的应用使用Firebase Storage。 在我的应用中,用户有个人资料,可以上传个人资料照片,然后当他们将来点击他们的个人资料时,它应该下载并显示他们的个人资料照片。 问题是,当我上传和下载照片时,会出现明显的延迟,并且看起来代码没有运行。 对于下载,我在我的ViewWillAppear()进行了调用,但是即使在屏幕加载并且我点击其他内容后它仍然继续运行。 我怎样才能加快速度呢? 不仅延迟很烦人,而且当我移动到另一个视图或注销并且ViewWillAppear()的代码仍在运行时它会导致崩溃。

override func viewWillAppear(bool: Bool) {

    var retPic : UIImage
    let storage = FIRStorage.storage()

    let storageRef = storage.referenceForURL("gs://project-xxxxxxxxxxx.appspot.com")

    let profPicRef = storageRef.child("images/" + (FIRAuth.auth()?.currentUser?.uid)! + ".jpg")
    // Download in memory with a maximum allowed size of 1MB (1 * 1024 * 1024 bytes)

    profPicRef.dataWithMaxSize(1 * 4096 * 4096) { (data, error) -> Void in
        if (error != nil) {
            print(error)
        } else {
            // Data for "images/island.jpg" is returned
            print("This is delayed")
            self.retPic = UIImage(data: data!)!
            self.imageView.image = self.retPic
                     print("still here")
            self.imageView.reloadInputViews()   
        }
    }
}

它很可能是a的组合:a)你要下载的数据有多大,b)你在哪种网络上,c)你所在的位置,以及d)你对“慢”的定义是什么是。 :)

也就是说,“普通的iPhone照片”确实很大 - 例如,iPhone 6s拍摄的照片是4032 x 3024.我的猜测是你的imageView比这个要小得多。 因此,有一个建议是根据您认为最终需要的图像大小将图像上传到Firebase存储之前调整图像大小。

我也同意Frank的看法,将downloadURLSDWebImagePINRemoteImageAlamoFireImage这样的库结合使用可能是一个好主意。 这些库负责处理重要任务,例如加载主线程,缓存,如果目标imageView突然消失,通常不会崩溃。

在将NSData转换为UIImage时应该使用后台线程,或者您可以获取图像URL并使用Kingfisher pod。 我更喜欢第二种选择。

Swift3版本:

import Kingfisher

profPicRef.downloadURL(completion: { (url, error) in

   if error != nil {

       print(error)
   }
   else{

       let retPicUrl = (url?.absoluteString)! as String

    self.imageView.kf.setImage(with: URL(string: retPicUrl)!)
    self.imageView.reloadInputViews() 

   }
 })

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM