8.2 KiB
8.2 KiB
性能优化证据文档
项目:vscode-code-reviewer 性质:优化措施整理文档(收录已落地实现的优化点,非基准测试报告)
1. 概述
1.1 目的
- 汇总工程中已实现的性能优化措施,形成可追溯、可评审的优化证据
- 每一项优化均给出实现位置(文件与方法)、机制与收益,便于代码评审与答辩演示
- 所有条目均为已在
src/中落地实现的代码,不含设计未落地项
1.2 统计口径
- 只收录已实现的优化;定量数据(耗时、内存等)需另行基准测试,本文件不虚构测量数字
- 收益均为定性描述,标注「间接收益」的条目指优化主要目的非性能但对性能有正向影响
2. 缓存类优化
2.1 静态分析结果缓存
- 实现位置:
src/orchestrator/orchestrator.ts(analysisCache、setAnalysisResult/getAnalysisResult/clearAnalysisResult) - 机制:以
document.uri为键缓存静态分析结果(diagnostics + adapterId + workingDir)。审查命令、CodeLens、修复命令(fixIssue/fixAll)等通过getAnalysisResult复用同一份结果,避免对同一文档重复调用 linter 进程 - 收益:消除同一文档在多次视图刷新/修复操作中的重复静态分析开销
2.2 方法级审查状态缓存(CodeLens)
- 实现位置:
src/scope/status-cache.ts(ReviewStatusCache)、src/views/codeLensProvider.ts、src/activation/commands.ts(更新入口) - 机制:以「文件 URI + 方法名」为键缓存方法级审查状态(规则命中数等)。CodeLens 渲染时直接读缓存,命令完成后只更新对应键;文档关闭时通过
clearDocument清理 - 收益:避免每次 CodeLens 刷新都重新扫描方法级审查结果,减少高频 UI 刷新下的重复计算
2.3 PMD auxclasspath 解析缓存(含并发合并)
- 实现位置:
src/services/auxClasspath.ts(AuxClasspathResolver:cache+inflight) - 机制:以工作目录为键缓存 Maven/Gradle 构建文件解析出的 classpath;缓存项记录构建文件路径与
mtimeMs,构建文件未变化时直接复用。inflight表合并同一目录的并发请求,使同一构建任务只执行一次(构建超时 120s);配置变更时通过clear失效 - 收益:PMD 分析前置的 classpath 解析从「每次分析都构建」降为「仅构建文件变更时构建」,且并发下不重复跑构建
2.4 AI Provider 注册表缓存
- 实现位置:
src/ai/registry.ts(cachedProviders、getProviders、invalidateProviderCache)、src/views/setupView.ts(失效触发) - 机制:内置
providers.json与用户.code-review/providers.json合并结果在模块级缓存,首次读取后复用;仅当用户在设置面板修改 Provider 配置(invalidateProviderCache)时才重新读取磁盘 - 出处设计:
2026-07-28-provider-registry-dynamic-design.md - 收益:避免每次获取 Provider/模型列表都重复读盘、解析 JSON 并合并
3. 流程类优化
3.1 自定义规则语言预过滤
- 实现位置:
src/rules/rule-filter.ts(filterForDocument、filterAndSummarize) - 机制:按文档语言对自定义规则做预过滤:处理 tsx/jsx 别名、sql/plsql 分组、JSP 子语言(java/javascript/typescript/css/html)展平。过滤后无相关规则时置位
skippedRequestA,跳过对应 AI 审查请求 - 出处设计:
2026-07-23-rule-prefilter-design.md - 收益:减少送入 AI 提示词的规则数量(减小上下文),跳过无规则场景下的无效 AI 请求,同时降低过滤计算量
3.2 修复方案预生成与持久化(pregen-fix)
- 实现位置:
src/fix/aiFixEngine.ts(aiFix预生成结果复用)、src/fix/fixPending.ts(FixPendingStore:singles / batches 持久化) - 机制:AI 修复方案在审查阶段预生成并持久化(按文件+键存储,支持单条与批量),应用修复时直接执行文本替换(
aiFixEngine中按originalText/newText替换),无需再次调用 AI API - 出处设计:
2026-08-22-pregen-fix-design.md - 收益:修复应用与预览路径免除重复 AI 调用,缩短交互链路延迟,并降低 API 成本
3.3 自定义规则导入去重判定
- 实现位置:
src/rules/converters/dedup-prompt.ts(buildDedupOnlyPrompt)、src/rules/import-service.ts - 机制:规则导入时通过提示词让 AI 为每条规则标注
duplicateOf/duplicateLevel/duplicateReason,导入阶段即完成与内置规则、既有自定义规则的查重 - 收益:避免重复/重叠规则入库后在下游检查与报告中产生重复计算与重复报告(间接收益)
3.4 debounce 防抖工具
- 实现位置:
src/utils/debounce.ts(debounce) - 机制:通用防抖函数(
setTimeout延后执行,窗口内连续触发只执行最后一次) - 收益:用于高频事件(输入、文档切换等)的触发合并,减少无效的重复检查调度(间接收益)
4. 界面与工程类优化
4.1 审查面板渲染优化(VSCode 主题适配)
- 实现位置:
src/panel/webview.ts - 机制:将原型固定深色值映射为 VSCode CSS 变量(
--vscode-editor-background等),移除未完工的 diff / 撤销按钮区块,压缩渲染 DOM 结构 - 出处设计:
2026-07-20-review-panel-optimization.md - 收益:面板在深/浅色双主题下无需重写样式;渲染 DOM 精简减少布局开销(间接收益)
4.2 适配器三层配置模式
- 实现位置:
src/config/linter.ts、src/config/index.ts;侧边栏面板src/views/setupView.ts - 机制:适配器配置按「默认配置 → 项目配置 → 用户配置」分层合并,配置读取后复用,变更时统一重载
- 出处设计:
2026-07-27-adapter-optimization-design.md - 收益:配置读取路径统一,减少散落的重复读配置/解析;外部依赖与模板生成集中处理(间接收益)
5. 收益汇总表
| 优化点 | 类型 | 关键实现文件 | 机制 | 收益 |
|---|---|---|---|---|
| 静态分析结果缓存 | 缓存 | src/orchestrator/orchestrator.ts |
uri 键缓存,多入口复用 | 消除同文档重复静态分析 |
| 方法级审查状态缓存 | 缓存 | src/scope/status-cache.ts |
文件+方法键缓存,文档关闭清理 | 减少 CodeLens 高频刷新重复计算 |
| PMD auxclasspath 缓存 | 缓存 | src/services/auxClasspath.ts |
mtime 校验 + 并发合并 | classpath 构建仅在变更时执行 |
| AI Provider 缓存 | 缓存 | src/ai/registry.ts |
模块级缓存 + 显式失效 | 避免重复读盘解析 |
| 规则语言预过滤 | 流程 | src/rules/rule-filter.ts |
语言别名/分组/JSP 展平 | 减小 AI 上下文、可跳过无效请求 |
| 修复预生成持久化 | 流程 | src/fix/aiFixEngine.ts、src/fix/fixPending.ts |
审查阶段预生成并复用 | 免除修复路径重复 AI 调用 |
| 规则导入去重 | 流程 | src/rules/converters/dedup-prompt.ts |
导入时标注重复字段 | 避免重复规则下游重复处理(间接) |
| debounce 防抖 | 流程 | src/utils/debounce.ts |
高频事件合并 | 减少无效重复调度(间接) |
| 审查面板渲染优化 | UI | src/panel/webview.ts |
主题变量化 + DOM 精简 | 双主题兼容、布局开销降低(间接) |
| 适配器三层配置 | 工程 | src/config/linter.ts |
分层合并+统一重载 | 统一配置读取路径(间接) |
6. 附录:出处索引
相关设计文档
docs/superpowers/specs/2026-07-20-review-panel-optimization.mddocs/superpowers/specs/2026-07-23-rule-prefilter-design.mddocs/superpowers/specs/2026-07-27-adapter-optimization-design.mddocs/superpowers/specs/2026-07-28-provider-registry-dynamic-design.mddocs/superpowers/specs/2026-08-22-pregen-fix-design.md
相关代码文件
src/orchestrator/orchestrator.tssrc/scope/status-cache.tssrc/views/codeLensProvider.tssrc/services/auxClasspath.tssrc/ai/registry.tssrc/rules/rule-filter.tssrc/fix/aiFixEngine.ts、src/fix/fixPending.tssrc/rules/converters/dedup-prompt.tssrc/utils/debounce.tssrc/panel/webview.tssrc/config/linter.ts、src/config/index.ts