본문으로 건너뛰기

[Open WebUI] saveChatHandler에서 불필요한 채팅 목록 재조회 제거

PR 링크: open-webui/open-webui#22983 상태: Merged | 변경: +0 / -2

들어가며

saveChatHandler는 채팅 히스토리를 DB에 저장하는 함수로, 메시지 교환 중 여러 번 호출된다(히스토리 저장, 브랜치 전환, 편집 등). 기존 구현에서는 이 함수가 호출될 때마다 getChatList로 전체 채팅 목록을 API에서 다시 불러왔다. 하지만 사이드바 채팅 목록 갱신이 실제로 필요한 시점은 이미 다른 핸들러에서 처리하고 있었다.

핵심 코드 분석

Before: 매 저장마다 채팅 목록 갱신

// saveChatHandler 내부
currentChatPage.set(1);
await chats.set(await getChatList(localStorage.token, $currentChatPage));

After: 불필요한 호출 제거

해당 2줄을 삭제했다. 채팅 목록 갱신은 다음 핸들러들이 이미 담당한다:

  • initChatHandler: 새 채팅 생성 시
  • chat:title 소켓 이벤트: 제목 생성 시
  • chatCompletedHandler: 응답 완료 후
  • moveChatHandler / archiveChatHandler: 명시적 사용자 액션 시

왜 이게 좋은가

  1. 중복 API 호출 제거: 하나의 메시지 교환에서 saveChatHandler가 여러 번 호출될 수 있는데, 매번 채팅 목록 전체를 다시 불러오는 것은 완전히 불필요한 네트워크 왕복이다.
  2. UI 깜빡임 방지: currentChatPage.set(1)이 매번 페이지를 리셋하면서 사이드바가 불필요하게 재렌더링되는 문제도 함께 사라진다.
  3. 관심사 분리: 채팅 저장은 저장만 담당하고, 목록 갱신은 실제로 목록이 변경되는 이벤트에서만 수행하는 것이 올바른 설계다.

코드 2줄 삭제로 불필요한 API 호출을 제거한 깔끔한 최적화다.

참고 자료

댓글

관련 포스트

PR Analysis 의 다른글