Skip to content

perf: fix UI degradation with large SSH config files. Issue #11078#11094

Open
hsdelirium wants to merge 5 commits intoEugeny:masterfrom
hsdelirium:master
Open

perf: fix UI degradation with large SSH config files. Issue #11078#11094
hsdelirium wants to merge 5 commits intoEugeny:masterfrom
hsdelirium:master

Conversation

@hsdelirium
Copy link
Copy Markdown

@hsdelirium hsdelirium commented Mar 16, 2026

Add mtime-based cache with Promise deduplication to OpenSSHImporter to avoid re-parsing ~/.ssh/config on every change detection cycle.

To test, create ~1k fake hosts in ~/.ssh/config and measure the loading time of the profile list.

upd:
Performance: avoid redundant DOM updates — HTML binding directive now skips re-rendering when the value hasn't changed, reducing unnecessary DOM manipulation during change detection cycles.

Performance: profile descriptions computed once per refresh — profile descriptions are now cached after each profile list refresh instead of being recomputed on every render, which is significant when the list is large or descriptions are expensive to resolve.

Performance: profile list loaded once per refresh — the profiles settings page now fetches the full profile list once instead of twice when refreshing.

Performance: faster PowerShell detection on Windows — well-known installation paths are checked first before falling back to a full PATH scan, reducing startup latency on Windows.

Performance: SSH config parsing cached to disk — parsed SSH profiles are persisted to a local JSON cache keyed by the config file's modification time. On subsequent loads, if the file hasn't changed, the cache is used instead of re-parsing, speeding up startup when the SSH config is large.

Correctness: profile selector includes all profile fields — when building selector options from a profile, all profile fields are now forwarded instead of a manually maintained subset, preventing fields from being silently dropped as the profile schema evolves.

Correctness: added missing default field for terminal color scheme — the profile defaults object now explicitly includes terminalColorScheme, ensuring it is always present when profiles are merged.

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