zsh で which と command -v の速度比較
雑記。
以前 Bash ではコマンドの有無の確認に which
ではなく command -v
を使った方がいいという旨を見た覚えがあったので、Zsh ではどうかを調べてみた。
$ zsh --version zsh 5.7.1 (x86_64-apple-darwin17.7.0)
まずは $PATH
内にあるコマンドで確認
for ((i=0;i<100000;i++)); do which node >/dev/null 2>&1 done
for ((i=0;i<100000;i++)); do command -v node >/dev/null done
結果
$ time zsh which.sh zsh which.sh 1.78s user 2.53s system 95% cpu 4.493 total $ time zsh command.sh zsh command.sh 1.37s user 2.16s system 94% cpu 3.737 total
command -v
の方が有意に早い。
続いて存在しないコマンドの場合。
for ((i=0;i<100000;i++)); do which node >/dev/null 2>&1 done
for ((i=0;i<100000;i++)); do command -v node >/dev/null done
結果
$ time zsh which.sh zsh which.sh 2.30s user 3.06s system 94% cpu 5.655 total
$ time zsh command.sh zsh command.sh 1.79s user 2.60s system 94% cpu 4.617 total
遅くなった分、より差がつく結果に。
ということで command -v
の方が早い模様。1回の呼び出しで体感できるほどではないものの、塵も積もればなんとやらなので、.zshrc
では command -v
を使ったほうがいいだろう。