UICollectionView + Firestore - медленная загрузка - PullRequest
0 голосов
/ 03 апреля 2020

Я хочу отобразить некоторые данные из Firestore, в настоящее время есть только 3 документов с 3 полями.

Вот моя функция loadData, которая вызывается в viewDidLoad():

    func loadDevices() {
        //clear devices array
        self.devices.removeAll()

        //get user's devices
        db.collection("devices").whereField("userId", isEqualTo: "{USER_ID}")
            .getDocuments() { (snap, err) in
                if let err = err {
                    print("Error getting devices: \(err)")
                } else {
                    for deviceItem in snap!.documents {
                        let data = deviceItem.data()
                        let device = Device(data: data)
                        self.devices.append(device)

                        self.collectionView.reloadData()

//                        DispatchQueue.main.async {
//                            self.collectionView.reloadData()
//                        }
                    }
                }
        }

Требуется около 2 секунд, чтобы загрузить 3 записи из Firestore. Если я проверю его с помощью жестко закодированного массива:

   func loadDevices() {
      devices.append(Device(id: "1", room: "test", userId: "dddd"))
      devices.append(Device(id: "2", room: "test2", userId: "dddd2"))
      devices.append(Device(id: "3", room: "test3", userId: "dddd3"))
   }

Он загружается мгновенно. Что-то не так с моим кодом?

1 Ответ

0 голосов
/ 03 апреля 2020

Очевидно, в вашем коде нет ничего плохого, однако важно отметить, что операции Firestore будут занимать значительно больше времени, чем добавление поддельных данных в список ваших устройств, причина в том, что ваше приложение ожидает обещания выполняется, и результаты запроса поступают асинхронно, чтобы затем продолжить его операции, что занимает некоторое время.

2 секунды действительно больше, чем вы ожидаете, и это может быть вызвано проблемами с задержкой, вызванными физическим расстояние между вами и вашим экземпляром пожарного магазина. Как вы можете видеть в документации Best Practices для Firestore , вам следует подумать о том, чтобы иметь экземпляр ближе к тому месту, где вы находитесь, чтобы уменьшить задержку и повысить производительность.

Хорошая новость заключается в том, что проблема не в сложности ваших данных или в количестве данных, поэтому, если количество записей увеличивается, а поскольку запросы к хранилищам данных выполняются очень быстро, количество времени для извлечения данных не должно изменяться в течение значительно более длительного периода.

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