尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Fallow 性能基准测试全解析:如何测出比 knip 快 27 倍

Fallow 性能基准测试全解析:如何测出比 knip 快 27 倍 Fallow 性能基准测试全解析:如何测出比 knip 快 27 倍【免费下载链接】fallowCodebase intelligence for TypeScript and JavaScript. Free static analysis of code and styles: unused code, duplication, circular deps, complexity hotspots, architecture boundaries, design-system drift. Optional paid runtime layer (Fallow Runtime): hot-path review and cold-path deletion evidence from real production traffic.项目地址: https://gitcode.com/gh_mirrors/fa/fallowFallow 是一款面向 TypeScript 和 JavaScript 的免费代码库智能codebase intelligence静态分析工具一个二进制就能找出未使用代码、循环依赖、代码重复、复杂度热点和架构边界违规。本文拆解 Fallow 官方性能基准测试的完整方法带你看懂比 knip 快 27 倍这个数字是怎么测出来的以及如何在自己机器上复现这套基准测试。先认识被测对象:Fallow 是什么在谈性能之前先说清楚 Fallow 测的是什么活。它把整个仓库读成一张依赖图从 import 边一路看到样式 token然后报告这张图显示出的问题。与 knip未使用代码、jscpd代码重复、madge/dpdm循环依赖相比Fallow 是一次分析跑完整条流水线文件发现 → 并行 Oxc 解析 → import 解析 → 模块图构建 → re-export 链传播 → 死代码检测也就是说快 27 倍是在干同样的完整分析活的前提下测出来的而不是拿单项功能去比单项功能。完整的方法论写在 BENCHMARKS.md开发者文档在 docs/benchmarking.md。环境先摆上台面:基准测试的比赛规则可复现是基准测试的生命。Fallow 的对比基准脚本在开跑之前会先打印一份完整的环境档案官方参考结果的采集环境如下项目配置CPUApple M510 核内存32 GB系统macOS 26.4Node / Rustv22.22.1 / rustc 1.95.0工具版本fallow 2.100.0、knip 5.87.0 与 6.6.1、jscpd 5.0.10环境打印逻辑就在 benchmarks/bench.mjs跑出来的每一份报告都自带 CPU 型号、核心数、内存、OS 和工具版本——发布结果时必须带环境信息被写进了官方规范避免在我机器上更快式的口水仗。27 倍是怎么来的:四个关键测量细节1. 测试项目:真实开源项目版本钉死基准不用随机玩具代码而是克隆 9 个真实项目preact、fastify、zod、vue/core、svelte、TanStack/query、vite、next.js、TypeScript每个都钉死在具体 tag 上文件数从 174zod到 38,146TypeScript不等。固定 tag 的清单在 benchmarks/download-fixtures.mjs一次性克隆后即可反复使用。2. 冷缓存 vs 热缓存:两种模式分开测Fallow 有文件内容哈希缓存同一文件没变就不重新解析。所以每个项目都测两遍冷缓存--no-cache不读不写缓存衡量原始分析速度这也是与 knip 对比所用的口径热缓存先跑一遍填充缓存再计时衡量增量分析速度官方会单独给出缓存加速比冷/热中位数之比1.5x 视为解析缓存收益显著。3. 2 次预热 5 次计时只取中位数每轮正式计时前两个工具各先跑 2 次预热让操作系统文件缓存稳定下来然后正式跑 5 次。最终对比不用平均值而用中位数——它对 GC 停顿、系统调度这类离群值更鲁棒。中位数计算在 benchmarks/bench.mjs 的stats()函数里同时输出 min/max/mean 供参考。4. 内存也一并测量每次计时都用/usr/bin/timeLinux 用-vmacOS 用-l包裹顺带记录峰值 RSS最大常驻内存。对 CI 环境来说内存往往和速度一样重要。还有一个容易被忽略的细节计时不是内部打点而是从外部测量整个进程墙钟时间进程启动、文件发现、退出都算在内这样测出的才是用户真实感知的耗时。结果解读:27 倍不是唯一数字诚实地看全表下面是官方参考结果2026-06-19真实项目、冷缓存、5 次中位数中未使用代码检测的核心数据项目文件数fallowknip v6谁更快preact24474ms2.01sfallow 27.1xfastify28664ms205msfallow 3.2xzod17447ms279msfallow 5.9xvue/core522138ms报错*fallow 可分析svelte3,337611ms632ms基本持平astro2,8593.76s1.21sknip 3.1xTypeScript38,1462.22s736msknip 3.0x* knipv5 和 v6在 next.js、vite、vue/core 三个项目上因为加载它们自己的配置文件失败而无法产出结果fallow 全部能分析。27 倍的由来preact 这个 244 个文件的小型项目上fallow 冷缓存中位数 74msknip v6 中位数 2.01s比值 2.01s ÷ 74ms ≈ 27.1x。值得注意官方对反例同样诚实大 monorepoastro、TypeScript上 knip 反而快约 3 倍——fallow 的多线程解析rayon在超大项目上被流水线开销拖累纯重复代码扫描上Rust 重写的 jscpd 5.x 依然更快fallow 的重复检测只是完整审计流程的一部分单次通过干的事更多内存方面 fallow 大部分项目占优如 fastify 53.5 MB vs knip 105.3 MBastro 项目除外。这种顺逆都写的呈现方式比单一宣传数字可信得多。一键复现:在本地跑同一套基准整套对比基准开箱即用步骤如下需要 Rust stable 工具链和 Node.js# 1. 进入基准目录并安装依赖 cd benchmarks npm install # 2. 下载真实项目测试夹具一次性约 9 个开源仓库 npm run download-fixtures # 3. 运行 fallow vs knip 对比基准 npm run bench输出依次包含环境信息、每个项目的冷/热缓存明细表、带加速比的汇总总表。自定义运行次数也很简单npm run bench -- --runs10 --warmup3只想测合成项目tiny→xlarge 五档规模确定性随机种子生成含约 80% 已用 / 20% 死代码就用npm run bench:synthetic测重复检测对比 jscpd 用npm run bench:dupes测循环依赖对比 madge/dpdm 用npm run bench:circular。另外CI 里还有一条独立的基准流水线 benchmarks/bench-ci.sh克隆 8 个开源项目、跑冷热缓存各 3 次输出 benchmark-action 兼容的 JSON让性能回归可以像单元测试一样在 PR 上持续跟踪Rust 侧则由 Criterion 微基准负责回归检测详见 docs/benchmarking.md 的分片说明。这些数字对你意味着什么 如果你的项目是中小型库或中型应用几十到几千个文件正好是大多数团队日常面对的规模fallow 的完整流水线分析通常在亚秒到秒级完成放进 CI 几乎无感。热缓存带来的加速是第二层红利改一个文件重新分析没动的文件直接跳过解析本地开发循环会更快。内存峰值对 CI 容器化环境很关键在 174 文件的 zod 项目上 fallow 峰值仅 39.1 MB而 knip v6 为 160.2 MB。 大型 monorepo 用户建议直接复现一次克隆仓库跑npm run bench -- --projects你的项目的同类流程用自己机器上的真实数字做决策而不是照搬任何一家宣传的倍数。小结比 knip 快 27 倍不是一个营销口号而是一整套可审计方法的产物钉死版本的项目夹具 冷/热双模式 预热后 5 次取中位数 外部墙钟计时 同步记录内存 公开环境信息 顺逆结果一起呈现。所有脚本都开放在 benchmarks/ 目录任何人都能对任何版本重跑验证——这正是好的性能基准该有的样子。【免费下载链接】fallowCodebase intelligence for TypeScript and JavaScript. Free static analysis of code and styles: unused code, duplication, circular deps, complexity hotspots, architecture boundaries, design-system drift. Optional paid runtime layer (Fallow Runtime): hot-path review and cold-path deletion evidence from real production traffic.项目地址: https://gitcode.com/gh_mirrors/fa/fallow创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表