perf(renderer): cache icons and virtualize launcher surfaces#533
Open
JustYannicc wants to merge 11 commits into
Open
perf(renderer): cache icons and virtualize launcher surfaces#533JustYannicc wants to merge 11 commits into
JustYannicc wants to merge 11 commits into
Conversation
This was referenced Jul 3, 2026
Contributor
Review: perf(renderer): cache icons and virtualize launcher surfacesSolid, well-tested consolidation. I traced the virtualization windowing, the caches, and the launcher/grid/list selection paths; behavior looks preserved in the paths that matter, with a couple of minor things worth a look. Strengths
Concerns / potential bugs
Notes
🟡 Approve with minor comments — no behavior-breaking bugs found; the scroll-effect redundancy is the one thing I would resolve before merge. 🤖 Automated review by Claude Code (Opus 4.8). |
Collaborator
Author
|
Addressed the review feedback in 513f43c. Fixes:
Verification run locally:
Also confirmed via GraphQL that PR #533 has no inline review threads; the actionable feedback was the top-level review comment. |
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
Why
These paths are all hit while rendering large launcher/Raycast result surfaces. Before this consolidation, repeated icon resolution could rescan Phosphor exports, concurrent identical file icons could fan out into duplicate IPC calls, large emoji/grid/list surfaces eagerly rendered thousands of cells/rows, and list registration could churn during selection-driven renders.
Compatibility impact
Rendering semantics are intended to stay unchanged. Icons still resolve through the same local/remote/Phosphor/file-icon paths, file icon failures remain retryable, and local asset misses are not permanently cached so late-created files can resolve. List/grid/emoji/launcher surfaces preserve keyboard selection, scrolling, context actions, section layout options, detail rendering, and existing fallback behavior while reducing rendered DOM work.
How tested
node --test scripts/test-icon-asset-cache.mjs scripts/test-icon-runtime-phosphor-cache.mjs scripts/test-icon-runtime-file-icon-cache.mjs scripts/test-emoji-grid-virtualization.mjs scripts/test-grid-virtualization.mjs scripts/test-list-registry-stable-order.mjs scripts/test-launcher-command-list-windowing.mjs scripts/test-emoji-caret-session.mjs-> 26 passing tests.pnpm test-> 50 passing tests, 1 skipped live Electron test.git diff --check-> pass.LauncherCommandList.tsx,list-runtime.tsx,grid-runtime.tsx,icon-runtime-phosphor.tsx,icon-runtime-render.tsx, andgrid-runtime-virtualization.ts.pnpm exec tsc -p tsconfig.renderer.json --noEmit --pretty falseon this standaloneorigin/mainbranch is still blocked by existing renderer typing debt outside this consolidation, includingApp.tsx,CameraExtension.tsx,LiquidGlassSurface.tsx, launcher browser source typing, Raycast API shims, settings, snippets, and quicklink icon types.Performance evidence
Focused before/after measurements on a temporary
origin/mainbaseline versus this branch:Focused tests also report emoji grid virtualization renders 112 visible emoji cells out of 4,096, grid virtualization renders 30 visible cells out of 5,000, local icon asset checks reduce 10,000 repeated positive lookups to one
statSync, and 100 concurrent identical file icons coalesce to one IPC request.Stack validation
Because standalone renderer typecheck is blocked by existing
origin/maintyping debt, I also validated on a temporary stack based on upstream PR #532 (fix(validation): restore project checks,JustYannicc:codex/consolidate-validation-checksatd4c6a9f) plus this consolidation series. Two stack-only conflicts were resolved by keeping the validation branch type cleanups together with the list/emoji virtualization changes.Stack results:
pnpm exec tsc -p tsconfig.renderer.json --noEmit --pretty false-> pass.pnpm test-> 51 passing tests, 1 skipped live Electron test.Replaces
perf(icons): cache local asset existence checksperf(list): virtualize emoji grid renderingperf(icons): memoize Phosphor icon resolutionperf(emoji): cache caret session stateperf(list): stabilize item registry orderperf(launcher): optimize command list renderingperf(grid): virtualize grid renderingperf(icons): coalesce file icon IPC