Моя база данных Firebase выглядит следующим образом
Это правила базы данных
{
"rules": {
".read": "auth!=true",
".write":"auth!=true",
"users": {
"$uid": {
".indexOn": "lastTxt"
}
}
}
}
В настоящее время в "rjs 11 детей" узлов. Я создал UITableView () для показа "conection" , "displayName" & "img_url" каждого rj и использовал следующий код для достижения этой цели.
class RJData {
var name: String?
var connection: String?
var url: String?
init(name: String?, connection: String?, url: String?) {
self.name = name
self.connection = connection
self.url = url
}
}
var rjUIDs = [String]()
var rjInfo = [RJData]()
func fetchInfoForAllRj()
{
Database.database().reference().child("rjs").observe(.value, with: { (snapshot) in
print("\n\n\n ----- snapshot = \(snapshot)\n\n\n")
for child in snapshot.children.allObjects as! [DataSnapshot]
{
let rjID = child.key
self.rjUIDs.append(rjID)
if let dictionary = child.value as? [String: AnyObject], let name = dictionary["displayName"] as? String, let connection = dictionary["connection"] as? String, let url = dictionary["img_url"] as? String
{
let data = RJData(name: name, connection: connection, url: url)
self.rjInfo.append(data)
}
}
DispatchQueue.main.async {
self.tableView_RJS.reloadData()
}
}, withCancel: nil)
}
Я кеширую изображение с помощью этой функции
extension UIImageView {
public func imageFromURL(urlString: String) {
let activityIndicator = UIActivityIndicatorView(activityIndicatorStyle: .gray)
activityIndicator.frame = CGRect.init(x: 0, y: 0, width: self.frame.size.width, height: self.frame.size.height)
activityIndicator.startAnimating()
if self.image == nil{
self.addSubview(activityIndicator)
}
URLSession.shared.dataTask(with: NSURL(string: urlString)! as URL, completionHandler: { (data, response, error) -> Void in
if error != nil {
print(error ?? "No Error")
return
}
DispatchQueue.main.async(execute: { () -> Void in
let image = UIImage(data: data!)
activityIndicator.removeFromSuperview()
self.image = image
})
}).resume()
}
}
Это делает мою работу, но для загрузки UITableView()
требуется от 30 до 50 секундпервый раз. После этого на загрузку UITableView()
уходит почти 1 секунда, я имею в виду, что он отлично работает после первого раза.
Что можно сделать, чтобы сократить время загрузки? Любая помощь будет оценена.