perf(raycast): reduce grid cell selection churn - #592
Closed
JustYannicc wants to merge 115 commits into
Closed
Conversation
…perf-wave2-integration-stack-20260704 # Conflicts: # src/renderer/src/raycast-api/hooks/use-cached-promise.ts
…perf-wave2-integration-stack-20260704 # Conflicts: # src/renderer/src/raycast-api/list-runtime-renderers.tsx # src/renderer/src/raycast-api/list-runtime.tsx
…perf-wave2-integration-stack-20260704 # Conflicts: # src/renderer/src/CameraExtension.tsx
…perf-wave2-integration-stack-20260704
…perf-wave2-integration-stack-20260704
…perf-wave2-integration-stack-20260704
…perf-wave2-integration-stack-20260704
…perf-wave2-integration-stack-20260704 # Conflicts: # src/renderer/src/raycast-api/list-runtime.tsx
…perf-wave2-integration-stack-20260704 # Conflicts: # scripts/bench-script-command-discovery.mjs # scripts/benchmark-file-search-delete-batch.mjs # scripts/lib/script-command-runner-harness.mjs # scripts/lib/ts-import.mjs # scripts/test-file-search-delete-batch.mjs # scripts/test-script-command-runner.mjs # src/main/file-search-index.ts # src/main/main.ts
…perf-wave2-integration-stack-20260704 # Conflicts: # scripts/lib/script-command-runner-harness.mjs # scripts/lib/ts-import.mjs # scripts/test-extension-lifecycle-sandbox.mjs # scripts/test-script-command-runner.mjs # src/main/main.ts # src/renderer/src/ExtensionView.tsx
…perf-wave2-integration-stack-20260704 # Conflicts: # .github/workflows/project-checks.yml # scripts/test-root-search-perf.mjs # src/renderer/src/CameraExtension.tsx # src/renderer/src/raycast-api/list-runtime.tsx
…-integration-stack-20260704
…-integration-stack-20260704
…-integration-stack-20260704
…e3-integration-stack-20260704
…erf-wave3-integration-stack-20260704 # Conflicts: # package.json # scripts/measure-extension-bundle-cache.mjs # scripts/test-icon-runtime-file-icon-cache.mjs # src/main/extension-runner.ts # src/renderer/src/components/HiddenExtensionRunners.tsx # src/renderer/src/raycast-api/icon-runtime-render.tsx
…/perf-wave3-integration-stack-20260704 # Conflicts: # scripts/test-browser-search-performance.mjs # scripts/test-root-search-perf.mjs
Collaborator
Author
|
Superseded by the clean consolidated wave4 renderer/Raycast PR: #599. That branch contains this PR's covered change on current main without the inherited broad-stack noise. |
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
scripts/measure-raycast-grid-render-churn.mjsto measure mixed visible grid cell rendering, rapid selection scroll math, and client-side selection render churn.GridItemRenderer.GridItemRendererinReact.memowith a render-value comparator so rapid selection changes rerender only cells whose visible props change.Why
Rapid keyboard selection updates recreated per-cell handlers and caused every visible Raycast Grid cell to render each step. The scroll math path was already negligible, so this keeps scroll behavior unchanged and targets the localized cell churn instead.
Compatibility impact
Raycast-visible grid behavior is preserved. Content, accessory, swatch, inset, fit, pointer, mouse-move, activate, and context-menu behavior are unchanged; the memo guard only skips renders when the visible cell inputs are identical.
How tested
node scripts/test-grid-virtualization.mjsnode scripts/test-emoji-grid-virtualization.mjsnode scripts/measure-raycast-grid-render-churn.mjs --iterations=7 --warmups=2 --selection-steps=1200pnpm exec tsc -p tsconfig.renderer.json --noEmit --pretty false./node_modules/.bin/tsc -p tsconfig.renderer.json --noEmit --pretty falsegrid-runtime-items.tsxandgrid-runtime.tsx: no errorsPerformance evidence
Focused benchmark:
node scripts/measure-raycast-grid-render-churn.mjs --iterations=7 --warmups=2 --selection-steps=1200.Before, against the unmodified runtime with the new harness:
After this change:
The meaningful win is the selection churn path: cell renders dropped about 98.2%, and median churn time dropped about 83.9%. The one-shot visible render and scroll-math paths are essentially unchanged/noisy, so no scroll behavior was changed.
Stack validation
Started from
codex/perf-wave3-integration-stack-20260704at commit206eab8280a2eb91a57e4e74ea6df99e45a55cb4; this branch is built on that stack without rebasing onto anything else.Replaces
SuperCmd iterative performance audit wave 4 child implementation: Raycast Grid render churn.