Извлечение данных из Firebase занимает слишком много времени - PullRequest
0 голосов
/ 30 сентября 2019

Моя база данных Firebase выглядит следующим образом enter image description here

Это правила базы данных

{
  "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 секунда, я имею в виду, что он отлично работает после первого раза.

Что можно сделать, чтобы сократить время загрузки? Любая помощь будет оценена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...