perf: improve streaming performance (#4986)

This commit is contained in:
one 2025-04-24 00:02:04 +08:00 committed by GitHub
parent 4c2c026f6d
commit 784b02e62e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -190,22 +190,24 @@ const handleResponseMessageUpdate = (
dispatch: AppDispatch, dispatch: AppDispatch,
getState: () => RootState getState: () => RootState
) => { ) => {
dispatch(setStreamMessage({ topicId, message })) setTimeout(() => {
if (message.status !== 'pending') { dispatch(setStreamMessage({ topicId, message }))
// When message is complete, commit to messages and sync with DB if (message.status !== 'pending') {
if (message.status === 'success') { // When message is complete, commit to messages and sync with DB
autoRenameTopic(assistant, topicId) if (message.status === 'success') {
} autoRenameTopic(assistant, topicId)
}
if (message.status !== 'sending') { if (message.status !== 'sending') {
dispatch(commitStreamMessage({ topicId, messageId: message.id })) dispatch(commitStreamMessage({ topicId, messageId: message.id }))
const state = getState() const state = getState()
const topicMessages = state.messages.messagesByTopic[topicId] const topicMessages = state.messages.messagesByTopic[topicId]
if (topicMessages) { if (topicMessages) {
syncMessagesWithDB(topicId, topicMessages) syncMessagesWithDB(topicId, topicMessages)
}
} }
} }
} }, 0)
} }
// Helper function to sync messages with database // Helper function to sync messages with database
@ -351,9 +353,8 @@ export const sendMessage =
: topic.prompt : topic.prompt
} }
// 节流 // 节流,降低到 50ms因为已经在handleResponseMessageUpdate内保证react能调度。
const throttledDispatch = throttle(handleResponseMessageUpdate, 100, { trailing: true }) // 100ms的节流时间应足够平衡用户体验和性能 const throttledDispatch = throttle(handleResponseMessageUpdate, 50, { trailing: true })
// 寻找当前正在处理的消息在消息列表中的位置
// const messageIndex = messages.findIndex((m) => m.id === assistantMessage.id) // const messageIndex = messages.findIndex((m) => m.id === assistantMessage.id)
const handleMessages = (): Message[] => { const handleMessages = (): Message[] => {
// 找到对应的用户消息位置 // 找到对应的用户消息位置