1 个不稳定版本
使用旧的 Rust 2015
0.3.0 | 2018年4月2日 |
---|
#34 在 #selector
用于 riiry
45KB
1K SLoC
rff
rff
是一个快速、简单的终端模糊文本选择器,具有完整的 UTF-8 支持。它使用了 fzy
的高级评分算法。
安装
预编译的二进制文件 从版本 0.3.0 开始可用。
如果您已安装 Rust 工具链,您还可以通过 Cargo 从源代码构建 rff
$ cargo install --git https://github.com/stewart/rff
此外,您还可以告诉 rustc
为您的特定 CPU 架构构建,以获得可能的轻微速度提升
$ RUSTFLAGS="-C target-cpu=native" cargo install --git https://github.com/stewart/rff
使用方法
rff
可以作为其他模糊查找器(如 fzy
或 selecta
)的替代品。
有关如何使用这些工具的示例,请参阅 selecta
的示例。
基准测试
两者 fzy
和 rff
都有一个 --benchmark
模式,它会运行 100 次匹配/评分循环,而不打印任何内容。这有助于最小化启动成本和 I/O 的影响,并更好地展示实际的匹配/评分速度。
为了确保有足够大的语料库,以便可以执行多线程优化,这些测试是在针对 Linux 内核源代码树中的文件列表运行的。
结果表明,总的来说,在 Linux 上,rff
比较慢,但在 macOS 上明显更快。然而,在实际使用中,这两个工具对于大多数项目来说都足够快了。毕竟,我们在任意基准模式下测试的是整个 Linux 内核!
权衡是,rff
支持输入和搜索词中的 UTF-8 字符,而 fzy
专注于 ASCII,尽管有计划最终支持宽字符。
使用了 hyperfine
工具来生成这些结果。
这个基准测试是在一个全新的 20 核 Linode 实例上运行的,该实例运行的是 Ubuntu 16.04 LTS
$ find ~/dev/linux -type f > files
$ hyperfine --warmup 5 'fzy -e drivers --benchmark < files' 'rff -s drivers --benchmark < files'
Benchmark #1: fzy -e drivers --benchmark < files
Time (mean ± σ): 423.9 ms ± 7.8 ms
Range (min … max): 407.7 ms … 432.9 ms
Benchmark #2: rff -s drivers --benchmark < files
Time (mean ± σ): 529.7 ms ± 7.2 ms
Range (min … max): 512.2 ms … 536.4 ms
有趣的是,tolower
的 macOS 实现似乎没有很好地优化,导致 fzy
的评分速度大大减慢。
λ find ~/dev/linux -type f > files
$ hyperfine --warmup 5 'fzy -e drivers --benchmark < files' 'rff -s drivers --benchmark < files'
Benchmark #1: fzy -e drivers --benchmark < files
Time (mean ± σ): 1.764 s ± 0.337 s
Range (min … max): 1.653 s … 2.722 s
Benchmark #2: rff -s drivers --benchmark < files
Time (mean ± σ): 1.019 s ± 0.004 s
Range (min … max): 1.015 s … 1.027 s
如果您有任何关于如何使 rff
更加快速的想法,请与我联系并告知!这是我不太熟悉的编程领域,构建这个工具是一个有趣的 learning experience!
依赖项
~2MB
~33K SLoC