Firebase Firestore上传方法花费的时间远远超过其他方法

时间:2020-02-09 01:18:43

标签: ios firebase google-cloud-firestore ionic4

因此,我使用Ionic和Firebase作为后端创建了一个应用程序。在Web浏览器或iOS模拟器上运行该应用程序时,响应速度非常快,并且该应用程序运行得很好。但是,在iOS上,将任何内容上传到Firebase都是永久的。请注意,从Firebase下载信息非常快速且简单。然而,上传带来了问题。我正在测试的wifi速度非常快。有人知道为什么会这样吗?

该应用程序是最近发布的,这对我和我自己的很多用户来说都是一个问题!

更新:因此,在进行了更多测试之后,看来问题出在某些功能上。这些方法是.update()和.add()

任何时候,我尝试更新Firebase中的字段都需要花费很长时间。每当我尝试将文档添加到集合中时,它也将永远耗时。为什么会这样?这是永远需要实现的一些代码:

async createDMChat(otherUID: string, otherName: string) {
        let newDoc: DocumentReference = this.db.firestore.collection('dmchats').doc();
        let docId: string = newDoc.id;
        let chatsArray = this.dmChats.value;
        let timestamp = Date.now();
        chatsArray.push(docId);
        //Adds to your dm chat
        await this.db.collection('users').doc('dmchatinfo').collection('dmchatinfo').doc(this.dataService.uid.value).set({
            chatsArray: chatsArray
        });
        //Adds to other person DM chat
        //-------------------THIS IS THE PART THAT TAKES FOREVER-----------------------
        //The .update() method is the problem as well as .add() to a collection
        await this.db.collection('users').doc('dmchatinfo').collection('dmchatinfo').doc(otherUID).update({
            chatsArray: firebase.firestore.FieldValue.arrayUnion(docId)
        });

        //Pull info on person's UID
        let otherUserInfo = await this.db.firestore.collection('users').doc('user').collection('user').doc(otherUID).get();

        let otherAvatar = otherUserInfo.data().avatar;

        //Sets message in database
        await newDoc.set({
            chatName: otherName + " & " + this.dataService.user.value.name,
            users: [otherUID, this.dataService.uid.value],
            lastPosted: timestamp,
            avatar1: this.dataService.avatarUrl.value,
            avatar2: otherAvatar,
            person1: otherName,
            person2: this.dataService.user.value.name
        });

        await newDoc.collection('messages').doc('init').set({
            init: 'init'
        });

        await this.dataService.storage.set(docId, timestamp);
    }

在上面的代码中,.update()是永远需要的方法。使用.add()方法将文档添加到集合中的其他功能也将永远花费。

这些方法在Web浏览器和仿真器上都是快速的。只是不在移动应用程序中。

================================================ ==========================

新更新:因此看来问题出在实际上是在等待Promise返回。我重写了所有不再使用add()或update()的函数,而是在用doc()代替add()创建新文档后使用了set()。然后,我使用set({...},{merge:true})来替换update()。

这一次服务器更改是即时的,但是在等待方法从服务器返回承诺时出现了问题。这是造成延迟的部分。有人知道为什么会这样吗?我可以简单地更改代码以不等待这些承诺返回,但是我希望在代码中保持等待,而不会出现此问题。

0 个答案:

没有答案