Files
2026Technology-Competition/docs/superpowers/specs/2026-08-27-performance-optimization.md
T

127 lines
8.2 KiB
Markdown
Raw 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.
# 性能优化证据文档
> 项目: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.md`
- `docs/superpowers/specs/2026-07-23-rule-prefilter-design.md`
- `docs/superpowers/specs/2026-07-27-adapter-optimization-design.md`
- `docs/superpowers/specs/2026-07-28-provider-registry-dynamic-design.md`
- `docs/superpowers/specs/2026-08-22-pregen-fix-design.md`
### 相关代码文件
- `src/orchestrator/orchestrator.ts`
- `src/scope/status-cache.ts`
- `src/views/codeLensProvider.ts`
- `src/services/auxClasspath.ts`
- `src/ai/registry.ts`
- `src/rules/rule-filter.ts`
- `src/fix/aiFixEngine.ts``src/fix/fixPending.ts`
- `src/rules/converters/dedup-prompt.ts`
- `src/utils/debounce.ts`
- `src/panel/webview.ts`
- `src/config/linter.ts``src/config/index.ts`