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

8.2 KiB
Raw Permalink Blame History

性能优化证据文档

项目:vscode-code-reviewer 性质:优化措施整理文档(收录已落地实现的优化点,非基准测试报告)

1. 概述

1.1 目的

  • 汇总工程中已实现的性能优化措施,形成可追溯、可评审的优化证据
  • 每一项优化均给出实现位置(文件与方法)机制收益,便于代码评审与答辩演示
  • 所有条目均为已在 src/ 中落地实现的代码,不含设计未落地项

1.2 统计口径

  • 只收录已实现的优化;定量数据(耗时、内存等)需另行基准测试,本文件不虚构测量数字
  • 收益均为定性描述,标注「间接收益」的条目指优化主要目的非性能但对性能有正向影响

2. 缓存类优化

2.1 静态分析结果缓存

  • 实现位置:src/orchestrator/orchestrator.tsanalysisCachesetAnalysisResult / getAnalysisResult / clearAnalysisResult
  • 机制:以 document.uri 为键缓存静态分析结果(diagnostics + adapterId + workingDir)。审查命令、CodeLens、修复命令(fixIssue / fixAll)等通过 getAnalysisResult 复用同一份结果,避免对同一文档重复调用 linter 进程
  • 收益:消除同一文档在多次视图刷新/修复操作中的重复静态分析开销

2.2 方法级审查状态缓存(CodeLens)

  • 实现位置:src/scope/status-cache.tsReviewStatusCache)、src/views/codeLensProvider.tssrc/activation/commands.ts(更新入口)
  • 机制:以「文件 URI + 方法名」为键缓存方法级审查状态(规则命中数等)。CodeLens 渲染时直接读缓存,命令完成后只更新对应键;文档关闭时通过 clearDocument 清理
  • 收益:避免每次 CodeLens 刷新都重新扫描方法级审查结果,减少高频 UI 刷新下的重复计算

2.3 PMD auxclasspath 解析缓存(含并发合并)

  • 实现位置:src/services/auxClasspath.tsAuxClasspathResolvercache + inflight
  • 机制:以工作目录为键缓存 Maven/Gradle 构建文件解析出的 classpath;缓存项记录构建文件路径与 mtimeMs,构建文件未变化时直接复用。inflight 表合并同一目录的并发请求,使同一构建任务只执行一次(构建超时 120s);配置变更时通过 clear 失效
  • 收益:PMD 分析前置的 classpath 解析从「每次分析都构建」降为「仅构建文件变更时构建」,且并发下不重复跑构建

2.4 AI Provider 注册表缓存

  • 实现位置:src/ai/registry.tscachedProvidersgetProvidersinvalidateProviderCache)、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.tsfilterForDocumentfilterAndSummarize
  • 机制:按文档语言对自定义规则做预过滤:处理 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.tsaiFix 预生成结果复用)、src/fix/fixPending.tsFixPendingStoresingles / batches 持久化)
  • 机制:AI 修复方案在审查阶段预生成并持久化(按文件+键存储,支持单条与批量),应用修复时直接执行文本替换(aiFixEngine 中按 originalText/newText 替换),无需再次调用 AI API
  • 出处设计:2026-08-22-pregen-fix-design.md
  • 收益:修复应用与预览路径免除重复 AI 调用,缩短交互链路延迟,并降低 API 成本

3.3 自定义规则导入去重判定

  • 实现位置:src/rules/converters/dedup-prompt.tsbuildDedupOnlyPrompt)、src/rules/import-service.ts
  • 机制:规则导入时通过提示词让 AI 为每条规则标注 duplicateOf / duplicateLevel / duplicateReason,导入阶段即完成与内置规则、既有自定义规则的查重
  • 收益:避免重复/重叠规则入库后在下游检查与报告中产生重复计算与重复报告(间接收益)

3.4 debounce 防抖工具

  • 实现位置:src/utils/debounce.tsdebounce
  • 机制:通用防抖函数(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.tssrc/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.tssrc/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.tssrc/fix/fixPending.ts
  • src/rules/converters/dedup-prompt.ts
  • src/utils/debounce.ts
  • src/panel/webview.ts
  • src/config/linter.tssrc/config/index.ts