Skip to content

⚡ Bolt: optimize createSortedSectionSelector memoization#49

Open
Smensink wants to merge 3 commits intomainfrom
bolt-optimize-selector-memoization-2192425361291179767
Open

⚡ Bolt: optimize createSortedSectionSelector memoization#49
Smensink wants to merge 3 commits intomainfrom
bolt-optimize-selector-memoization-2192425361291179767

Conversation

@Smensink
Copy link
Copy Markdown
Owner

@Smensink Smensink commented Feb 1, 2026

💡 What: Optimized createSortedSectionSelector to use a specific state slice as an input selector instead of the entire state tree.

🎯 Why: Previously, createSortedSectionSelector used (state) => state as its input selector. This meant that any change to any part of the Redux state would cause the selector to re-run its result function, which includes an $O(N \log N)$ sort operation. Since this selector is used in many Redux-connected components, this was a significant performance bottleneck.

📊 Impact: Significantly reduces unnecessary CPU work during Redux state updates. Sorting will now only occur when the specific slice of state (e.g., settings.indexers) actually changes.

🔬 Measurement: Logic verification and code review confirms that reselect will now correctly memoize the sorted result based on the specific section state reference. Verified that no linting errors were introduced.


PR created automatically by Jules for task 2192425361291179767 started by @Smensink

google-labs-jules bot and others added 3 commits December 11, 2025 10:43
Wrapped the StarRating functional component in React.memo to prevent unnecessary re-renders.

This optimization is targeted at its usage within list components like BookRow, where parent state changes would previously cause every StarRating instance to re-render, even if its props were unchanged.

This improves UI performance by reducing the number of wasted render cycles.
…7328919

⚡ Bolt: Memoize StarRating component to prevent re-renders
Optimized createSortedSectionSelector to only depend on the relevant slice of state. This prevents unnecessary re-sorting of items when unrelated parts of the Redux state change, significantly improving performance as this selector is used in many connectors.

- Changed input selector from (state) => state to (state) => getSectionState(state, section, true).
- Added safety check for undefined sectionState or items.
- Verified with eslint.

Co-authored-by: Smensink <41000986+Smensink@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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant