Skip to content

⚡ Bolt: Optimize rendering in LiquidStream#82

Open
teerthsharma wants to merge 1 commit into
mainfrom
bolt/liquid-stream-render-optimization-18068705668392101966
Open

⚡ Bolt: Optimize rendering in LiquidStream#82
teerthsharma wants to merge 1 commit into
mainfrom
bolt/liquid-stream-render-optimization-18068705668392101966

Conversation

@teerthsharma

Copy link
Copy Markdown
Owner

💡 What:

  • Extracted the inline message rendering logic in <LiquidStream /> into a separate <MessageItem /> component.
  • Wrapped <MessageItem /> in React.memo().
  • Replaced the inline new Date().toLocaleTimeString() call with lazy state initialization: const [timestamp] = useState(() => new Date().toLocaleTimeString());.

🎯 Why:

  • Performance: In the previous implementation, every time a new message was added (or the array state updated), React had to re-render the entire list of messages, leading to an O(N^2) rendering bottleneck as the chat history grew.
  • Bug Fix: Calling new Date().toLocaleTimeString() directly during the render cycle meant that every time the component re-rendered, all historical messages would update their display to the current time.

📊 Impact:

  • Reduces re-renders significantly: historical messages no longer re-render when new ones are added to the list.
  • Fixes the stale state bug by freezing the timestamp at the time the message component mounts.

🔬 Measurement:

  • Verified via Playwright that messages are still added successfully.
  • If you monitor React DevTools Profiler while typing/sending messages, you will notice that the MessageItem components do not re-render unless their specific msg prop changes. Timestamp remains correct over time.

PR created automatically by Jules for task 18068705668392101966 started by @teerthsharma

Extracted inline message rendering into a memoized `MessageItem` component.
Used lazy state initialization for `timestamp` to freeze its value on mount.
This prevents O(N^2) render performance issues and fixes a bug where
historical messages would incorrectly update to the current time on every render.

Co-authored-by: teerthsharma <78080953+teerthsharma@users.noreply.github.com>
@google-labs-jules

Copy link
Copy Markdown
Contributor

👋 Jules, reporting for duty! I'm here to lend a hand with this pull request.

When you start a review, I'll add a 👀 emoji to each comment to let you know I've read it. I'll focus on feedback directed at me and will do my best to stay out of conversations between you and other bots or reviewers to keep the noise down.

I'll push a commit with your requested changes shortly after. Please note there might be a delay between these steps, but rest assured I'm on the job!

For more direct control, you can switch me to Reactive Mode. When this mode is on, I will only act on comments where you specifically mention me with @jules. You can find this option in the Pull Request section of your global Jules UI settings. You can always switch back!

New to Jules? Learn more at jules.google/docs.


For security, I will only act on instructions from the user who triggered this task.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant