💻
bashの起動が遅い(mac homebrew使用時)
ターミナルを起動してから入力可能になるまで妙に時間がかかってイライラしてきたので調査。
$ time source .bash_profile
real 0m16.250s
user 0m7.648s
sys 0m8.492s
さすがにこれは遅い。。。16秒以上かかる。
調べていくとhomebrewのパスを調べる関数が遅いことがわかる。特にformulaを指定したやつ
$ time echo $(brew --prefix nvm) > /dev/null
real 0m3.941s
user 0m1.806s
sys 0m2.088s
なので、こういうやつを
if [ -f $(brew --prefix)/etc/bash_completion ]; then
. $(brew --prefix)/etc/bash_completion
fi
export NVM_DIR="$HOME/.nvm"
[ -s $(brew --prefix nvm)/nvm.sh ] && . $(brew --prefix nvm)/nvm.sh # This loads nvm
[ -s $(brew --prefix nvm)/etc/bash_completion.d/nvm ] && . $(brew --prefix nvm)/etc/bash_completion.d/nvm # This loads nvm bash_completion
↓ こういう感じにする
BREW_PREFIX=$(brew --prefix)
if [ -f ${BREW_PREFIX}/etc/bash_completion ]; then
. ${BREW_PREFIX}/etc/bash_completion
fi
BREW_PREFIX_NVM=$(brew --prefix nvm)
export NVM_DIR="$HOME/.nvm"
[ -s ${BREW_PREFIX_NVM}/nvm.sh ] && . ${BREW_PREFIX_NVM}/nvm.sh # This loads nvm
[ -s ${BREW_PREFIX_NVM}/etc/bash_completion.d/nvm ] && . ${BREW_PREFIX_NVM}/etc/bash_completion.d/nvm # This loads nvm bash_completion
だいぶ早くなる
$ time source .bash_profile
real 0m4.763s
user 0m2.216s
sys 0m2.535s
それでも4秒か。。。
$(brew --prefix nvm)
が妙に重いので、変更しなくていいなら直書きするのも手
BREW_PREFIX_NVM=/usr/local/opt/nvm # <== 環境による
export NVM_DIR="$HOME/.nvm"
[ -s ${BREW_PREFIX_NVM}/nvm.sh ] && . ${BREW_PREFIX_NVM}/nvm.sh # This loads nvm
[ -s ${BREW_PREFIX_NVM}/etc/bash_completion.d/nvm ] && . ${BREW_PREFIX_NVM}/etc/bash_completion.d/nvm
$ time source .bash_profile
real 0m0.956s
user 0m0.447s
sys 0m0.534s
まとめ
$(brew --prefix nvm)
が特に遅い。
PATHのexportも無駄があるなあと思っているけど、今の実用時間では問題ない
Discussion