zshrcの最後に書き足してね!ってツールが多すぎて最後を取り合って世はまさに大海賊時代
— やんく✌('ω')✌ (@yy_yank) August 19, 2022
ということで。
前提
macOSでzshを使っていたりtmuxを使っていたりzshにプラグインを突っ込んだりzshrcがとっ散らかったりしているプログラマです。
なんか遅い
うわっ・・・、私のzshおそすぎ!?(某画像)
ってなったので速くしたい。
早速原因を突き止めるべく計測しました
こちらの記事によると
https://ohbarye.hatenablog.jp/entry/2019/04/27/speed-up-zsh-start-up-time
これらを足せば良いらしい。
# .zshenv
zmodload zsh/zprof && zprof
# .zshrc
if (which zprof > /dev/null 2>&1) ;then
zprof
fi
zshを起動するとこういうのが出てくるようになった。
-----------------------------------------------------------------------------------
num calls time self name
-----------------------------------------------------------------------------------
1) 2 182.17 91.08 37.65% 182.17 91.08 37.65% compaudit
2) 1 93.91 93.91 19.41% 93.33 93.33 19.29% _zsh_highlight_load_highlighters
3) 1 122.71 122.71 25.36% 85.70 85.70 17.71% prompt
4) 1 237.91 237.91 49.18% 55.75 55.75 11.52% compinit
5) 2 33.42 16.71 6.91% 32.95 16.48 6.81% prompt_spaceship_setup
どうやらsdkmanが遅いらしい
spaceshipやzsh_highlightとかもあるのはさておき、
sdkmanの起動で2〜3割かかっているようだった。
(先程のzprofは改善後なのでsdkmanの姿はなかったが)
sdkmanを起動時にloadしないことにしてみた
こちらの記事にあやからせていただき
https://hatappi.blog/entry/2019/06/01/112358
こんな感じの関数で解決することにしてみた。
sdk() {
#THIS MUST BE AT THE END OF THE FILE FOR SDKMAN TO WORK!!!
unfunction "$0"
export SDKMAN_DIR="${HOME}/.sdkman"
[[ -s "${HOME}/.sdkman/bin/sdkman-init.sh" ]] && source "${HOME}/.sdkman/bin/sdkman-init.sh"
$0 "$@"
}
unfunctionを仕込むことで、初回に1回だけ呼ばれる関数になっているらしい。
sdkコマンドを打つときについでにロード。
これでzsh起動がちょびっと早く出来た。
おまけ
- macに最新のzshはどうやって入れればいいですか?
- zshのString Interpolationってどうやるんでしたっけ?
0 件のコメント:
コメントを投稿