使用Firestore在聊天应用程序中加载对话消息

时间:2018-11-27 09:49:19

标签: firebase react-native google-cloud-firestore chat

在使用React Native和Redux,并使用Firestore作为后端构建聊天应用程序时,为特定对话加载消息的最佳方法是什么?

我在一开始显示8个聊天条目,当我单击一个时,将看到包含20条最新消息的聊天屏幕。对每个聊天(不是所有聊天,而是显示的聊天,因为使用了分页)实施实时侦听器是一个好主意,这是每个人的messages集合中的20条最新消息并事先准备好吗?

或者是在打开特定聊天的消息屏幕时加载消息的更好的主意。

我了解,随着用户的体验,第一种选择会更好,因为在显示聊天的前20条消息时没有延迟,但是它不会消耗很多可能永远不需要的数据,因为在这8条中聊天中,用户只能与2或3进行交互。

除了这两个之外还有其他更好的方法吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

如果是个好主意,则取决于您要创建哪种聊天应用程序。在您所讨论的延迟和您所获得的数据量之间以及在用户可能看到或可能看不到的数据量之间始终进行权衡。此外,如果您说您有8个聊天室,其中包含20条消息,则表示默认情况下,当用户打开您的聊天应用程序时,Firestore将向您收取8 * 20 = 160 读操作的费用,即使用户是否进入聊天室,我认为这不是一个好主意。如果您有几个用户,那不会有问题,但是如果您的应用不断增长,您可能会再考虑一下。在Firestore中,一切都是根据其pricing plan进行的读写次数。

答案 1 :(得分:0)

我认为,您应该考虑通过为应用程序提供脱机功能而不是一次加载不必要的数据来升级UX。您应该获取有关聊天的数据,并使您的应用程序记住最新的10-20条消息,并且您始终可以同步数据。您可能要考虑使用RealmSQLite

另外,为了在显示聊天的聊天屏幕上获得更好的用户体验,您应该考虑使while len(dogs) >= 2*CardAmount: playersDeck.append(dogs[:2*CardAmount:2]) # even poitions computerDeck.append(dogs[1:2*CardAmount:2]) # odd positons dogs = dogs[2*CardAmount:] # update dogs 节点适应每个聊天中的最后一条消息和时间戳,这样您就不必为每个聊天嵌套查询仅用于一次屏幕渲染的项目。