性能与可扩展性
dup-code-check 的默认目标是:在本地与 CI 中快速扫描工程目录,给出可定位的重复/相似结果。
扫描阶段:I/O 与文件收集
文件收集策略
默认会尊重 .gitignore,并在满足条件时优先走 Git 路径收集文件列表:
respectGitignore=truefollowSymlinks=false- root 是 Git 仓库且系统上可用
git
当 Git 路径不可用时,会退回到基于 walker 的遍历方式。
I/O 成本控制
你可以用以下选项控制扫描成本:
maxFileSize:跳过超大文件(默认 10 MiB)maxFiles:扫描文件数量预算maxTotalBytes:扫描字节数预算ignoreDirs:跳过依赖/构建目录(默认已包含常见目录)
检测阶段:算法复杂度直觉
不同检测器的成本差异很大:
fileDuplicates:低成本(线性扫描 + 分组)codeSpanDuplicates/tokenSpanDuplicates:中等成本(指纹/窗口/候选匹配)similarBlocks*:成本更高(候选对生成 + 相似度计算),但实现上限制了 block 深度并有阈值过滤
如果你只想“先把最强信号跑出来”,建议先只跑重复文件,再逐步升级到 --report。
大仓库建议(经验法则)
- 优先把扫描 root 控制到“你真正关心的目录”
- 对依赖/产物目录明确加
--ignore-dir - CI 中尽量设预算(
--max-total-bytes或--max-files),并用--strict显式感知“预算导致的不完整扫描” - 需要更快时:
- 先尝试关闭
--report - 再尝试提高阈值(
--min-token-len/--min-match-len)
- 先尝试关闭