Ios 下载图像的速度非常慢
我正在尝试创建我的第一个小聊天应用程序。用户可以在注册时更改其个人资料图片。每次用户与其他用户聊天时,我都会尝试显示配置文件图片。一切正常,但问题是有些图片速度非常慢。这会导致一些消息显示得很快,而另一些消息显示得很慢 我的代码:Ios 下载图像的速度非常慢,ios,swift,Ios,Swift,我正在尝试创建我的第一个小聊天应用程序。用户可以在注册时更改其个人资料图片。每次用户与其他用户聊天时,我都会尝试显示配置文件图片。一切正常,但问题是有些图片速度非常慢。这会导致一些消息显示得很快,而另一些消息显示得很慢 我的代码: override func viewDidLoad() { super.viewDidLoad() messagesTableView.delegate = self messagesTableView.dataSource = self
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
}
此图像正在快速下载和显示:
->
这个下载和显示速度非常慢:
->
我已经找了几个小时想找到一个解决办法,但还没有找到。我希望有人能帮助我!谢谢,第二张图片太重了。这就是为什么它需要时间。当用户第一次上传图像时,您应该将图像尺寸裁剪到100x100或200x200。因此,数据库中的所有配置文件图片都将具有相同的尺寸,并且所需时间更少 即使您的小图像也是720x720=37kb,而另一个是3000x2002=11.2MB。所以你知道发生了什么
如果你不想在用户上传图片时裁剪图片,你必须在你的服务器上这样做,服务器会保留每个图片的缩略图。所以接下来会发生的是,原始图片将存储在数据库中,但您将获取小尺寸的缩略图。但这取决于你想要实现什么 第二张图像太重。这就是为什么它需要时间。当用户第一次上传图像时,您应该将图像尺寸裁剪到100x100或200x200。因此,数据库中的所有配置文件图片都将具有相同的尺寸,并且所需时间更少 即使您的小图像也是720x720=37kb,而另一个是3000x2002=11.2MB。所以你知道发生了什么
如果你不想在用户上传图片时裁剪图片,你必须在你的服务器上这样做,服务器会保留每个图片的缩略图。所以接下来会发生的是,原始图片将存储在数据库中,但您将获取小尺寸的缩略图。但这取决于你想要实现什么 看看你的代码,你正在使用Firebase,所以我猜你没有额外的后端。问题确实在上传端。您需要优化大小,从而裁剪图像
func resize(image: UIImage, size: CGSize) -> UIImage? {
let scale = size.width / image.size.width
let height = image.size.height * scale
UIGraphicsBeginImageContext(CGSize(width: size.width, height: height))
image.draw(in: CGRect(x: 0, y: 0, width: size.width, height: height))
let newImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return newImage
}
看看你的代码,你正在使用Firebase,所以我猜你没有额外的后端。问题确实在上传端。您需要优化大小,从而裁剪图像
func resize(image: UIImage, size: CGSize) -> UIImage? {
let scale = size.width / image.size.width
let height = image.size.height * scale
UIGraphicsBeginImageContext(CGSize(width: size.width, height: height))
image.draw(in: CGRect(x: 0, y: 0, width: size.width, height: height))
let newImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return newImage
}
慢速图像是一个11.2MB的图像(而另一个图像只有几KB)。。。这将永远是缓慢的。你应该尝试优化(在大小方面)可以上传的内容。慢速图像是一个11.2MB的图像(而其他图像只有几KB)。。。这将永远是缓慢的。您应该尝试优化(在大小方面)可以上传的内容。谢谢您的帮助!谢谢你的帮助!谢谢你的帮助!谢谢你的帮助!