私は自分のアプリにFirebase Storageを使用しています。私のアプリでは、ユーザーがプロフィールを持っていて、プロフィール写真をアップロードすることができます。その後、プロフィールをクリックすると、プロフィール写真がダウンロードされて表示されます。問題は、写真をアップロードしてダウンロードするとかなりの遅延があり、コードが実行されていないときにコードが実行されていないように見えることです。ダウンロードのために、私はViewWillAppear()
に電話をしていますが、画面がロードされた後でも実行し続け、他のものをクリックしています。どうすればこれをスピードアップできますか?遅延が煩わしいだけでなく、別のビューまたはログアウトに移動してViewWillAppear()
のコードがまだ実行されているときにクラッシュが発生します。それはほとんど可能性が高いa)はどのくらいのデータがダウンロードしようとしているであることは、あなたがにしているネットワークのb)にはどのような、あるC)あなたが配置している場合、およびd)の組み合わせだiOS - Firebaseストレージのダウンロードが遅い
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()
}
}
}
ファイルがどのくらいありますか?どのタイプのネットワークをダウンロードしていますか?インターネット速度はおそらくあなたの最大の減速です。特に携帯端末では、これはかなり制限されています。 –
ファイルはあまりにも大きくない、それは単なる通常のiphone写真です。少なくとも画面を切り替えるときにメソッドの実行を強制的に強制する方法はありますか?これをスピードアップするにはどうしたらいいですか? – Alex
私はいくつかのエンジニアと確認しました。最善の策は、GCSサーバー(ファイルのアップロード先)へのラウンドトリップが遅いことです。それを変えるためにあなたができることは何もありません。往復速度(またはその帯域幅)も変更できませんが、このようなシナリオを最適化する方法を検討しています。ダウンロードの場合、ダウンロードライブラリ(SDWebImageなど)を使用して[downloadURLからダウンロードする](https://firebase.google.com/docs/storage/ios/download-files#generate_a_download_url)を試して、問題が削除されているかどうかを確認することができます。 –