docs: 新增性能优化证据文档(10 项已实现优化盘点)
This commit is contained in:
@@ -0,0 +1,127 @@
|
||||
# 性能优化证据文档
|
||||
|
||||
> 项目: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`
|
||||
Reference in New Issue
Block a user