なっく日報

技術やら生活やらのメモ

zshの起動を高速化する方法

ネタがないので、昔こんなことをやってzshの起動を高速化したよというのを共有したいと思います。

計測

〜が遅いという場合、プロファイリングするのが定石ですね。

http://blog.uu59.org/2013-06-01-zsh-optimize.html という素晴らしい記事を参考に、

ボトルネックを割り出しました。

↑の記事に全て書いてますが、一応プロファイリングの方法をコチラにも書いておくと、

.zshenvの先頭行に↓を足す

zmodload zsh/zprof

.zshrcの最後の行に↓を足す

if type zprof > /dev/null 2>&1; then
  zprof | less
fi

という感じ。

新しくzshを起動すると、lessで↓のようなプロファイリング結果が開きます。

num  calls                time                       self            name
-----------------------------------------------------------------------------------
 1)    8         103.24    12.91   54.43%     55.28     6.91   29.14%  -zgen-source
 2)    8         142.31    17.79   75.03%     38.30     4.79   20.19%  zgen-load
 3)    1          45.19    45.19   23.82%     28.76    28.76   15.16%  compinit
 4)    2          16.43     8.22    8.66%     16.43     8.22    8.66%  compaudit
 5)    1          15.95    15.95    8.41%     15.95    15.95    8.41%  _zsh_highlight_load_highlighters
 6)    3           6.69     2.23    3.53%      6.69     2.23    3.53%  afu-register-zle-accept-line
 7)    1           5.67     5.67    2.99%      5.67     5.67    2.99%  _zsh_highlight_bind_widgets
 8)    1           5.33     5.33    2.81%      5.33     5.33    2.81%  afu-keymap+widget
 9)    2           3.97     1.98    2.09%      3.97     1.98    2.09%  afu-install-tracking-completer
10)    2           3.52     1.76    1.86%      3.52     1.76    1.86%  async_init
・・・

自分の場合

当時、antigenを使っていたのですが、コイツがボトルネックだと判明し、zgenに乗り換えました。

github.com

どんなものかは、↓の昔の記事で解説しているので、よろしければご一読を。

yukidarake.hateblo.jp

その他やったこと

themeはpureというミニマムで高速なヤツにしている

github.com

速いだけでなく、色々と自分好みだったりします。

xenv(plenv, pyenv, rbenv)には--no-rehashをつけている

プロファイリングの記事と同じ、uu59さんの記事を参考に

http://blog.uu59.org/2014-01-06-fast-rbenv.html

まとめ

普段、ターミナルの中で生活している人は、zshの起動速度は生産性に直結するので、 たまには見直すことも大事ですよね

https://github.com/yukidarake/dotfiles/blob/master/.zshrc

↑で、私の.zshrcを管理しているので、興味ある方は参考にしてみてください。

では!