zshのプラグイン管理としてzplugを使ってたが、起動が遅くてtmuxとかで複数起動しようとするとき特にストレスになってた。
zpluginにすると速くなるという記事も多く見かけたので、zplugからzpluginへの移行をやってみた。
zpluginの遅延ロードを使って、プラグインのロードをzsh起動後に行うようにした。(zplugの遅延ロード等も試したが、やり方が悪かったのかあまり速度改善しなかった)
以前(zplug使用)のzsh起動時間
計測
これで計測
export ZFILES=~/.zfiles
export ZPLUG_HOME=~/.zplug
start=`date +%S%3N`
source $ZFILES/.zplugin
end=`date +%S%3N`
echo "plugin load $((end - start))ms"
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を書き換え
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"
-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秒以上時間がかかっていてストレスだったが、大幅に起動時間が短縮されてとても良い
- 遅延ロードの設定も書きやすそう(まだちゃんと見てないのでもっといろいろできるんだろう)