[RFC] 132 - 服务端发送消息实现优化 #9056
arvinxx
started this conversation in
RFC | 特性开发
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
背景与问题
由于在 1.0 中我们采用了 service 的区分,以相对较低的成本实现了 LobeChat 从客户端到服务端的转型。但实际上,客户端与服务端在延迟开销上有数量级上的差异,虽然我们采用了乐观更新等手段来尝试弥补其中的体验问题。但在经过一年的运行,逐步暴露出来了 DB 版本发消息感觉很慢的问题。因此本 RFC 将针对这个环节做定向的优化。
从 0 开始实现 LoebChat 经历了四阶段的数据流的获取与存储,做一个完整的回顾:
而正是这样的一个演进过程,使得我们现有的大部分业务逻辑是写在前端的 store 层的。这在原本的 client 模式下没有什么问题,因为前端操作是非常快的。但如果换到后端 db 的请求上就不 work 了,因为请求延迟会高到可感知。
比如一个发生消息,包含了 topic 的创建、用户消息的创建、助手消息的创建,其中会有 6 个请求,如果每个请求要 500ms,那么用户硬生生需要等待 3s 才会开始流式输出内容,体感上就是会非常慢。哪怕用了乐观更新也无济于事。
而 2.0 开始,我们将以 Server / Desktop 作为功能迭代的核心模式,因此大量业务逻辑也会从 store 下沉到 server 端,进而减少请求次数这个最大的开销部分。
实现思路
将原本在前端 store 中的 create messge/createTopic 之类的逻辑下沉到到 server 端实现,并且去掉需要用 refreshMessages/Topics 等重新拉取数据逻辑,换成在一个请求中全量获取,在这个请求中实现:
这样只需一次请求即可完成本来 8 次请求才能完成的动作,大大提升响应速度。同时经过实践验证,该方案可以简化乐观更新的实现,并且不再出现首次新建 topic 消息闪烁的问题。
但由于这个是针对 serverDB 模式的优化,因此只会在 server db 模式下才会走到。
进展
Beta Was this translation helpful? Give feedback.
All reactions