私は最初の小さなチャットアプリを作成しようとしています。ユーザーは登録時にプロフィール画像を変更することができます。ユーザーが別のユーザーとチャットするたびにプロフィール画像を表示しようとしています。すべて動作しますが、問題はいくつかの写真が極端に遅いことです。これにより、一部のメッセージは高速で表示され、他のメッセージは非常に遅く表示されます。極端に遅い画像をダウンロード
マイコード:
override func viewDidLoad() {
super.viewDidLoad()
messagesTableView.delegate = self
messagesTableView.dataSource = self
messagesTableView.clearsContextBeforeDrawing = true
getMessages()
}
func getMessages() {
let ref = FIRDatabase.database().reference()
let messagesReference = ref.child("Messages")
// GETTING THE MESSAGES AND USERNAMES
messagesReference.observe(.childAdded, with: { (snapshot) in
if let dictionary = snapshot.value as? [String: AnyObject] {
let usernameReference = ref.child("Usernames").child(dictionary["Sender"] as! String)
// CONVERTING THE USERNAME INTO THE UID
usernameReference.observeSingleEvent(of: .value, with: { (snapshot2) in
if let dictionary2 = snapshot2.value as? [String: AnyObject] {
let uid = dictionary2["UID"] as! String
let uidReference = ref.child("Users").child(uid)
// GETTING THE PROFILE IMAGE LINK
uidReference.observeSingleEvent(of: .value, with: { (snapshot1) in
if let dictionary1 = snapshot1.value as? [String: AnyObject] {
let imageLink = dictionary1["Image Link"] as! String
// DOWNLOADING THE PROFILE IMAGE FROM THE LINK
let url = URL(string: imageLink)
URLSession.shared.dataTask(with: url!) { (data, response, error) in
if(error != nil){
print(error as Any)
return
}
let profileImage = UIImage(data: data!)
DispatchQueue.main.async {
let message = Messages()
message.setValuesForKeys(dictionary)
message.profileImage = profileImage
self.messages.append(message)
self.messagesTableView.reloadData()
}
}.resume()
}
}, withCancel: nil)
}
}, withCancel: nil)
}
}, withCancel: nil)
}
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return messages.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCell(style: .subtitle, reuseIdentifier: "cellId")
DispatchQueue.main.async {
let message = self.messages[indexPath.row]
cell.textLabel?.text = message.Sender
cell.detailTextLabel?.text = message.Message
cell.imageView?.image = message.profileImage
}
return cell
}
この画像はダウンロードして高速に表示している:私は「>https://firebasestorage.googleapis.com/v0/b/chat-62eba.appspot.com/o/ProfileImages%2F0B758D09-58FE-4771-BA29-16FB0EAB2FFD.png?alt=media&token=8d886b45-dd14-4157-b647-217122b6d331
そして、この1つは非常に遅いダウンロードと表示されます解決策を見つけるために何時間も捜したが、まだ解決策を見つけていない。私は誰かが私を助けることを願っていますありがとう
低速画像は11.2 MBの画像です(これとは異なり、数KBの画像)。 ...これはいつも遅いです。 アップロードできるものを最適化してください(サイズの点で)。 – entwicklerfuchs