0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

zpluginの遅延ロード使ってzshの起動を早くする

Posted at

zshのプラグイン管理としてzplugを使ってたが、起動が遅くてtmuxとかで複数起動しようとするとき特にストレスになってた。
zpluginにすると速くなるという記事も多く見かけたので、zplugからzpluginへの移行をやってみた。
zpluginの遅延ロードを使って、プラグインのロードをzsh起動後に行うようにした。(zplugの遅延ロード等も試したが、やり方が悪かったのかあまり速度改善しなかった)

以前(zplug使用)のzsh起動時間

計測

これで計測

.zshrc
export ZFILES=~/.zfiles
export ZPLUG_HOME=~/.zplug
start=`date +%S%3N`
source $ZFILES/.zplugin
end=`date +%S%3N`
echo "plugin load $((end - start))ms"
.zplugin
zplug "mafredri/zsh-async"
zplug "zsh-users/zsh-history-substring-search"
zplug "zsh-users/zsh-syntax-highlighting"
.
.
.

結果

プラグインのロードが支配的で、2~3秒かかっていた...

plugin load 2470ms 
else 276ms
kefi@asuka %

zprofでみたところ、zplug関連がなんかすごそうだった
参考: https://qiita.com/vintersnow/items/7343b9bf60ea468a4180

num  calls                time                       self            name
-----------------------------------------------------------------------------------
 1)    1         387.84   387.84   15.34%    364.40   364.40   14.41%  __zplug::log::write::info
 2)    8         369.51    46.19   14.61%    351.74    43.97   13.91%  __zplug::core::sources::call
 3)    1         505.78   505.78   20.00%    251.92   251.92    9.96%  __check__
 4)    8         242.87    30.36    9.60%    242.87    30.36    9.60%  __zplug::sources::github::check
 5)    4         413.29   103.32   16.35%    208.18    52.05    8.23%  compinit
 6)    1         492.94   492.94   19.49%    205.19   205.19    8.11%  __zplug::core::core::prepare
 7)    6         205.11    34.19    8.11%    205.11    34.19    8.11%  compaudit
 8)    8         488.98    61.12   19.34%    119.47    14.93    4.72%  __zplug::core::sources::use_default
 9)    8         591.83    73.98   23.41%    102.33    12.79    4.05%  __zplug::core::add::to_zplugs
10)    1          98.63    98.63    3.90%     98.63    98.63    3.90%  __zplug::utils::awk::available
11)    1          75.87    75.87    3.00%     75.87    75.87    3.00%  __zplug::core::cache::diff
12)    3          88.06    29.35    3.48%     66.04    22.01    2.61%  __zplug::core::core::get_interfaces
13)    1          45.81    45.81    1.81%     44.98    44.98    1.78%  __zplug::base::base::git_version
14)    1          23.44    23.44    0.93%     23.44    23.44    0.93%  __zplug::job::handle::flock
15)   30          22.01     0.73    0.87%     22.01     0.73    0.87%  regexp-replace
16)    7          66.28     9.47    2.62%     18.58     2.65    0.73%  __zplug::base
17)    2          18.12     9.06    0.72%     18.12     9.06    0.72%  promptinit

zpluginを使う

https://github.com/zdharma/zplugin
参考: https://qiita.com/Jung0/items/bec15a0285a02d5761d4

install

推奨手順でinstall
https://github.com/zdharma/zplugin#option-1---automatic-installation-recommended

sh -c "$(curl -fsSL https://raw.githubusercontent.com/zdharma/zplugin/master/doc/install.sh)"

zshrcを書き換え

.zshrc
 export ZFILES=~/.zfiles
-export ZPLUG_HOME=~/.zplug
+
 start=`date +%S%3N`
+source ~/.zplugin/bin/zplugin.zsh
+autoload -Uz _zplugin
+(( ${+_comps} )) && _comps[zplugin]=_zplugin
 source $ZFILES/.zplugin
 end=`date +%S%3N`
 echo "plugin load $((end - start))ms"
.zplugin
-zplug "mafredri/zsh-async"
-zplug "zsh-users/zsh-history-substring-search"
-zplug "zsh-users/zsh-syntax-highlighting"
+zplugin load mafredri/zsh-async
+zplugin ice wait'!3'; zplugin load zsh-users/zsh-history-substring-search
+zplugin ice wait'!3'; zplugin load zsh-users/zsh-syntax-highlighting
+
+ zcompile ~/.zplugin/bin/zplugin.zsh

waitを使って遅延ロードにできるらしい

zplugin変更後の起動時間

初回起動

plugin load 245ms 
else 296ms

2回目起動

plugin load 114ms 
else 211ms
  • 2回目以降は100ms強、初回起動でも200~300msで起動した
  • 今回は遅延ロードとして、3秒待って各プラグインのロードを開始しているため、3秒後くらいからいろんな機能が使えるようになっている

所感

  • これまで起動(シェルを操作できるようになるまで)に2秒以上時間がかかっていてストレスだったが、大幅に起動時間が短縮されてとても良い
  • 遅延ロードの設定も書きやすそう(まだちゃんと見てないのでもっといろいろできるんだろう)
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?