皆さんのシェルの起動速度はどうですか?シェル起動時に eval "$(hoge init)"
を実行するようなツールをたくさん入れていると徐々に遅くなってきてつらいですよね
そこで以下のように hoge init
の出力をファイルに書き出しておいて、起動時にはそれをsource
する戦略をとると少しだけシェルの起動を高速化できて少しだけ嬉しいです。
# zshでの例 HOGE_RC_FILE=/path/to/hoge-rc.zsh [[ ! -e "$HOGE_RC_FILE" ]] && hoge init > "$HOGE_RC_FILE" source "$HOGE_RC_FILE"
plenv
,goenv
,nodenv
,pyenv
を管理しているanyenv
でのベンチマークを以下に貼っておきます。
# source/zshrc ANYENV_RC_FILE=./anyenv-rc.zsh [[ ! -e "$ANYENV_RC_FILE" ]] && anyenv init - > "$ANYENV_RC_FILE" source "$ANYENV_RC_FILE"
# eval/zshrc eval "$(anyenv init -)"
$ hyperfine --shell=zsh --warmup=3 'source $PWD/eval/zshrc' 'source $PWD/source/zshrc' Benchmark 1: source $PWD/eval/zshrc Time (mean ± σ): 1.288 s ± 0.010 s [User: 0.487 s, System: 0.727 s] Range (min … max): 1.278 s … 1.314 s 10 runs Benchmark 2: source $PWD/source/zshrc Time (mean ± σ): 452.8 ms ± 5.7 ms [User: 189.2 ms, System: 240.1 ms] Range (min … max): 446.9 ms … 467.1 ms 10 runs Summary 'source $PWD/source/zshrc' ran 2.85 ± 0.04 times faster than 'source $PWD/eval/zshrc'
この戦略で少し困ることとしては、ツールの更新があるたびにhoge init > $HOGE_RC_FILE
相当のコマンドを良きタイミングで実行する必要があることですね。