forked from KickTalkOrg/KickTalk
-
Notifications
You must be signed in to change notification settings - Fork 1
Open
Labels
Description
🚨 Critical Performance Issue
The Message component and its children are re-rendering excessively, causing significant performance degradation in the chat interface.
Current Problem
- Message.jsx is NOT memoized - Every message re-renders on any state change
- Support events log 10+ renders per single event
- Each new message or scroll triggers re-render of ALL visible messages
- Causes UI lag, stuttering, and poor user experience
Evidence
// SupportEventMessage was logging this 10+ times per event:
[SupportEventMessage] Reward event data: {message: {…}, metadata: {…}, eventType: 'reward'}Performance Impact
- 🐌 Chat scrolling lag
- 🔋 Excessive CPU/battery usage
- 💾 Memory pressure from constant re-renders
- ⚡ Poor real-time chat experience
Root Cause Analysis
- Message.jsx (line 25):
const Message = ({- Not wrapped inmemo() - Child components re-render even when props haven't changed
- Virtualized list triggers unnecessary re-renders during scroll
- State changes in ChatProvider cause cascade re-renders
Proposed Solution
// Message.jsx
import { memo } from 'react';
const Message = memo(({ message, userChatroomInfo, chatroomId }) => {
// ... component logic
});
export default Message;Additional Optimizations Needed
- Add
memo()to all message child components - Implement proper dependency arrays for hooks
- Consider
useMemofor expensive computations - Audit ChatProvider state changes
Priority
High - Directly impacts user experience and system performance
Related Components
Message.jsx(main issue)SupportEventMessage.jsxRegularMessage.jsxModActionMessage.jsxMessagesHandler.jsxChatProvider.jsx
Reactions are currently unavailable