Skip to content

fix(desktop): reduce Settings CPU spike from redundant re-renders and forced layout#4517

Open
CVEngineer66 wants to merge 1 commit into
esengine:main-v2from
CVEngineer66:fix/settings-cpu-spike-4459
Open

fix(desktop): reduce Settings CPU spike from redundant re-renders and forced layout#4517
CVEngineer66 wants to merge 1 commit into
esengine:main-v2from
CVEngineer66:fix/settings-cpu-spike-4459

Conversation

@CVEngineer66

Copy link
Copy Markdown
Contributor

Fixes #4459

问题

设置自定义模型时 CPU 飙到 40%、UI 卡死。主要由三个编译问题叠加导致:

  1. ModelPicker 搜索无防抖 — 每次按键都遍历所有 provider ref 做 .includes() 过滤 + new URL() 解析
  2. ProviderEditor 输入字段无 memo — 每次在 name/key/baseUrl 字段输入,都重新解析整个 model list 并重建 chips
  3. ModelSwitcher 渲染中触发强制布局getBoundingClientRect() 直接在渲染函数内调用

改动

文件 改动
SettingsPanel.tsx reload/apply/backgroundApplyuseCallback
allRefs(s)useMemo([s.providers])
providerAccessGroups()useMemo([s.providers, t])
modelNames 解析 → useMemo([models])
ModelChips 独立 memo 组件(不随 input 输入重渲染)
uniqueStrings O(n²) .includes() → Set 去重 O(n)
ModelPicker / ProviderModelDraftPicker 搜索 → 150ms debounce
ModelSwitcher.tsx getBoundingClientRect() 从渲染函数移入 useEffect + ResizeObserver

审阅

已通过 code review,无阻塞问题。

…ayout

Root cause (esengine#4459): configuring custom models on Windows triggered 40%
CPU usage from three compounding issues:
  - ModelPicker re-filtered all refs on every keystroke (no debounce)
  - ProviderEditor reparsed modelNames on every input change (no memo)
  - ModelSwitcher called getBoundingClientRect() in render path

Fixes:
- allRefs(s) → useMemo([s.providers]) in ModelsSection
- providerAccessGroups call → useMemo([s.providers, t]) in ProvidersSection
- modelNames split/trim/filter → useMemo([models])
- ModelChips extracted as standalone memo component
- reload/apply/backgroundApply → useCallback
- uniqueStrings O(n²) → Set-based O(n)
- ModelPicker + ProviderModelDraftPicker search → 150ms debounce
- ModelSwitcher getBoundingClientRect → useEffect + ResizeObserver
@github-actions github-actions Bot added v2 Go rewrite (1.x) — main-v2 branch, active development desktop Wails desktop app (desktop/**) labels Jun 15, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

desktop Wails desktop app (desktop/**) v2 Go rewrite (1.x) — main-v2 branch, active development

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: 设置自定义模型时CPU占用异常

1 participant