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