なんか巷の記事によると速度は
ag > ack > grep
の順に速いって風潮だけども、実感としてgrepがそんなに遅くない思っていたので調べてみました...
結果
詳しい話は後にして、結果は
GNU grep | BSD grep | ag | ack | |
---|---|---|---|---|
Linux | 0.56s | NaN | 0.96s | 18.64s |
Linux 再起動直後 | 23.50s | NaN | 22.31s | 41.81s |
Mac book air | 1.26s | 12.50s | 3.47s | 23.64s |
Mac book air 再起動直後 | 24.15s | 43.86s | 8.56s | 72.21s |
キャッシュってめっちゃ効いてる!!!!
あれ、ack遅い...
検索しないようなファイルが増えたら、早く感じるのかな...?
調べ方等
調べ方はgithubにあるlinux kernelのrepositoryで検索してかかった時間!
repositoryのtop directoryで検索した結果...
$ time -p ag clock >/dev/null
real 0.96
user 1.72
sys 1.60
$ time -p grep -r clock * > /dev/null
real 0.56
user 0.39
sys 0.17
$ time -p ack clock * > /dev/null
real 18.64
user 18.14
sys 0.47
という結果が得られました!
ファイルシステムのキャッシュが効いてるかもしれないので、各コマンドを再起動後やってみた...
$ time -p ag clock >/dev/null
real 22.31
user 1.05
sys 0.87
$ time -p grep -r clock * > /dev/null
real 23.50
user 1.26
sys 1.45
$ time -p ack clock * > /dev/null
real 41.81
user 20.36
sys 1.47
巷の記事はMacでやってるのが多いので... grepが遅いってのはBSDのgrepだからか!?ということでMacでも試してみた。
$ time -p ag clock >/dev/null
real 3.47
user 5.35
sys 1.43
$ time -p grep -r clock * > /dev/null
real 12.50
user 12.35
sys 0.48
$ time -p ack clock * > /dev/null
real 23.64
user 22.15
sys 1.48
ということでGNU grepでも試してみた!
$ time -p ggrep -r clock * > /dev/null
real 1.26
user 0.66
sys 0.59
macでも再起動後試してみた!
$ time -p ag clock >/dev/null
real 8.56
user 6.25
sys 6.84
$ time -p grep -r clock * > /dev/null
real 43.86
user 23.00
sys 6.37
$ time -p ggrep -r clock * > /dev/null
real 24.15
user 2.04
sys 8.57
$ time -p ack clock * > /dev/null
real 72.21
user 46.07
sys 10.14
まとめとか
ag ~ GNU grep > BSD grep > ack
って感じだった。
コンパイル等で検索したくないファイルが増えたら、agとackは早く感じるかもしれない...
概ね再起動後の速度は20秒くらい遅くなってるからファイル読み込みにそれくらいかかってるって事かな?
再起動後のMac book airでのagの速度だけ何かおかしいが、SSDなことが関係してるのだろうか?
とりあえず、BSD grepとack使わない方がよさげ。
GNU grepか、機能豊富なのがいいならagにしとけって事かな?