Optimize model picker search rerenders#3659
Draft
cursor[bot] wants to merge 1 commit into
Draft
Conversation
Co-authored-by: Julius Marminge <juliusmarminge@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What Changed
ModelPickerSearchInputthat owns the raw input value.ModelPickerContentstate normalized to the trimmed query used for filtering.Why
React Doctor was run with
pnpm dlx react-doctor@latest . --verbose --category performance --no-telemetryto identify performance/rerender concerns, then I manually profiled the model picker hot path with React Scan enabled. The baseline showed whitespace-only search input, which does not change visible results, still caused excessive model picker commits.UI Changes
Before/after React Scan recordings were captured as Cursor artifacts:
before_model_picker_whitespace_rerenders.mp4— five spaces in the search field increased ModelPicker profiler commits from 4 to 35.after_model_picker_whitespace_rerenders.mp4— the same interaction finished at 9 commits, with only the local input work remaining.Checklist
Validation:
vp check(passed; existing warnings reported outside this change)vp run typecheck(passed)Note
Reduce rerenders in model picker search by extracting a memoized
ModelPickerSearchInputcomponentModelPickerSearchInputcomponent in ModelPickerContent.tsx, preventing the parent from rerendering on every keystroke.inputValuestate and emits only trimmed values viaonSearchQueryChange, so the parentModelPickerContentupdatessearchQueryonly when the trimmed value actually changes.onEnterHighlightedModel,onEscape), and model selection logic is extracted into a reusablehandleSearchEnterHighlightedModelhandler in the parent.Macroscope summarized 31520e0.