💨
zsh の起動速度を改善した
anyenv init をキャッシュする話です。
最近 vim-jp の Slack に入ったので眺めています。vim だけではぜんぜんなくて、幅広い雑談が豊富でおもしろいです。もちろん話題の中心は大好きな vim なので、なんというか最高ですね。
さて、vim-jp で最近一瞬だけ zsh の起動速度が話題になっていました。結構みんな速い………!普通にいまの速度で諦めていた自分を恥じました。恥ずかしい。確認してみたら… 0.5 秒近くかかっているとか…!せっかちな自分にはあるまじき状態である。
$ for i in $(seq 1 10); do time zsh -i -c exit > /dev/null ; done
zsh -i -c exit > /dev/null 0.43s user 0.45s system 94% cpu 0.935 total
zsh -i -c exit > /dev/null 0.42s user 0.43s system 96% cpu 0.884 total
zsh -i -c exit > /dev/null 0.42s user 0.44s system 96% cpu 0.892 total
zsh -i -c exit > /dev/null 0.42s user 0.43s system 95% cpu 0.881 total
zsh -i -c exit > /dev/null 0.42s user 0.43s system 96% cpu 0.879 total
zsh -i -c exit > /dev/null 0.42s user 0.43s system 96% cpu 0.881 total
zsh -i -c exit > /dev/null 0.41s user 0.44s system 96% cpu 0.879 total
zsh -i -c exit > /dev/null 0.41s user 0.43s system 96% cpu 0.877 total
zsh -i -c exit > /dev/null 0.42s user 0.45s system 96% cpu 0.898 total
zsh -i -c exit > /dev/null 0.42s user 0.44s system 96% cpu 0.901 total
とはいえあんまり大したことはやってないんだけど。どうしたもんかなとツラツラ眺めていたら、わりと anyenv のイニシャライズ処理が大半を占めていたことが判明。
こういうやつ。
if [ -x /usr/local/bin/anyenv ]
then
eval "$(anyenv init - --no-rehash)"
eval "$(nodenv init -)"
fi
eval する前の結果を外に書き出しといて、キャッシュするようにしてみた。さらに zcompile もかけておく。/tmp に入れとけば適度にリフレッシュしてくれるし安心かなと。こんな感じにした。
if [ -x /usr/local/bin/anyenv ]
then
if ! [ -f /tmp/anyenv.cache ]
then
anyenv init - --no-rehash > /tmp/anyenv.cache
zcompile /tmp/anyenv.cache
fi
source /tmp/anyenv.cache
if ! [ -f /tmp/nodeenv.cache ]
then
nodenv init - > /tmp/nodeenv.cache
zcompile /tmp/nodeenv.cache
fi
source /tmp/nodeenv.cache
fi
この変更をしただけで、驚いたことに倍以上の速さに!!すげえ。
$ for i in $(seq 1 10); do time zsh -i -c exit > /dev/null ; done
zsh -i -c exit > /dev/null 0.18s user 0.19s system 83% cpu 0.448 total
zsh -i -c exit > /dev/null 0.18s user 0.17s system 94% cpu 0.362 total
zsh -i -c exit > /dev/null 0.18s user 0.17s system 94% cpu 0.376 total
zsh -i -c exit > /dev/null 0.17s user 0.17s system 93% cpu 0.361 total
zsh -i -c exit > /dev/null 0.17s user 0.16s system 94% cpu 0.359 total
zsh -i -c exit > /dev/null 0.18s user 0.17s system 94% cpu 0.373 total
zsh -i -c exit > /dev/null 0.18s user 0.17s system 94% cpu 0.374 total
zsh -i -c exit > /dev/null 0.18s user 0.17s system 94% cpu 0.372 total
zsh -i -c exit > /dev/null 0.19s user 0.18s system 94% cpu 0.382 total
zsh -i -c exit > /dev/null 0.19s user 0.18s system 93% cpu 0.392 total
まとめ
今までは tmux でウィンドウ追加したときに、一拍待ってから作業を開始する仕草が身についてたんだけど、この変更をしてからはサクサクコマンドが叩けるようになった。めっちゃ違う。
まだもうちょっと速くはできそうではあるが。投資した時間に見合わなそうなので、いったんおしまい。
Discussion