Files
ycode/docs/设置打开性能修复-2026-10-18.md

49 lines
5.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 设置打开性能修复(2026-10-18)
用户确认修复设置打开慢,并补充:普通“设置”入口默认应进入“通用”。本轮已完成实现和隔离应用验证;当前用户窗口没有被强制重启,主进程/preload 更新需要完整重启 YCode 才能加载。
设置窗口改为独立 `settings.html` / `settings.tsx` 入口,首次使用创建,关闭后隐藏并复用同一渲染进程。设置子页按需加载并缓存代码;关闭时卸载页面,清理搜索、未保存模型表单、密码输入和快捷键录制状态,重新打开时读取最新配置。主窗口关闭时销毁隐藏缓存窗口,正常退出仍销毁窗口。
普通设置入口(账户菜单、标题菜单、Ctrl+,、未传 section 的 IPC 和内嵌后备入口)默认“通用”;显式 `model/new` 仍进入添加模型。设置渲染完成后通过带请求 ID 的信号唤起窗口,连续请求以最后一个目标为准,关闭后到达的就绪信号不会重新显示窗口。新信号只接受所属设置窗口主 frame;沙盒策略来源验证已适配独立设置入口,没有放宽到任意页面。
初始 HTML 有可绘制的主题占位,页面加载期间保留设置导航和内容占位。共享按钮、开关和下拉样式显式随窗口壳加载;专项验证发现通用页此前隐含依赖模型页导入的 Select CSS,已修复直接打开通用页时下拉高度变成 21px 的回归,恢复为 32px。按需加载没有采用会引入约 300ms fallback 延时的 Suspense 页面切换,改为代码缓存和明确加载状态。
主要文件:
- `src/main/index.ts`:窗口缓存、导航/就绪/关闭竞态、退出清理、独立入口和策略校验。
- `src/preload/index.ts`、`src/shared/ipc.ts`:设置窗口生命周期信号及请求 ID。
- `electron.vite.config.ts`、`src/renderer/settings.html`、`src/renderer/src/settings.tsx`:renderer 多入口。
- `src/renderer/src/components/SettingsDialog.tsx`、`settings-panel-loader.tsx`、`src/renderer/src/styles/settings-entry.css`:窗口壳、共享样式、按需子页、刷新与清理。
- `src/renderer/src/App.tsx`、`src/renderer/src/workbuddy/user-menu/AccountMenu.tsx`:默认进入通用。
- `scripts/verify-settings-performance.cjs`、`package.json`:新增 `npm run test:settings-performance`,测量真实页面内容和后续绘制帧,验证生命周期和导航;使用本次构建副本,避免其他任务重建 out 时丢失哈希资源。
- `scripts/verify-settings-nav.cjs`、`scripts/verify-account-menu.cjs`:更新默认页面和缓存窗口的验收约定。
验证结果:
| 项目 | 结果 / 证据 |
| --- | --- |
| 完整生产构建、最终 typecheck、相关 diff --check | 通过;`.tmp/settings-build-final.log`、`.tmp/settings-typecheck-final.log` |
| 生产真实窗口性能与生命周期 | 26 项通过、0 renderer 错误;`.tmp/settings-performance-plMGVs/report.json` |
| 独立 Vite 开发模式 + 真实原生窗口 | 26 项通过、0 renderer 错误;`.tmp/settings-performance-vmVayL/report.json`;测试服务器已关闭 |
| 导航与账户菜单 | 20 / 64 项通过;`.tmp/settings-nav-uFrgQk/`、`.tmp/account-menu-UyqRJA/` |
| 通用、个性化、记忆与进化 | 43 / 34 / 25 项通过;`.tmp/general-settings-h6QOeC/`、`.tmp/personalization-settings-QRlcKp/`、`.tmp/memory-settings-bRs1wp/` |
| 外观、快捷键、智能体 | 21 / 32 / 17 项通过;`.tmp/appearance-settings-QxvT5P/`、`.tmp/shortcuts-settings-LpJa3s/`、`.tmp/agents-settings-P9eimH/` |
| 关于与获取帮助 | 20 项通过;`.tmp/about-help-settings-shGlBh/` |
| 共享样式对对话引用/附件的回归 | 44 项通过;`.tmp/reference-content-Mcp7jt/` |
| 修改前后浅色/深色 9 页计算样式 | 18 个状态、162 组选择器快照零差异;`.tmp/settings-visual-final-diff.json`。已人工查看最终浅色通用和深色模型截图 |
性能口径:以前诊断记录中的 FCP 为浏览器首次内容绘制。此次进一步记录所选页面真实控件出现(contentMs),以及它们出现后两帧(frameMs),避免将占位或 IPC 返回误当作加载完成;不同口径不直接相减计算精确提升百分比。
| 指标 | 生产构建实测 | 独立开发模式实测 |
| --- | --- | --- |
| 第一次原生窗口 show | 101 ms | 185 ms |
| 第一次通用页内容出现 | 191 ms | 277 ms |
| 第一次通用页内容后两帧 | 231 ms | 351 ms |
| 缓存窗口重开:原生 show | 9~16 ms | 21~29 ms |
| 缓存窗口重开:通用内容出现 | 17~21 ms | 35~44 ms |
| 缓存窗口重开:内容后两帧 | 23~28 ms | 50~61 ms |
初始静态脚本从 5,016,896 字节降到 637,012 字节,基础与共享控件 CSS 从 3,424,320 字节降到 230,103 字节;其后仅加载目标子页代码和必要样式。首次打开仍有创建原生窗口/渲染进程的成本;缓存保留一个渲染进程及代码,页面本身在关闭时卸载。表中数据是隔离实例测量,设备负载会带来波动,当前用户旧进程中的新效果尚未验收。
测试同时覆盖显式添加模型、未保存编辑器清理、跨窗口模型保存后的隐藏/可见刷新、启动中的连续目标切换、最小化恢复、加载中关闭和重开、独立入口的沙盒策略读取授权以及主窗口关闭时清理隐藏缓存。测试没有发送真实模型请求,也没有操作 WorkBuddy 或新增原版证据;这是 YCode 性能与回归验收,不能据此宣称 WorkBuddy 全状态 1:1 验收完成。