[zsh 고속화] 에~, 그런 플러그인 매니저가 있다면 더 빨리 가르쳐줘, 라고 누나가 분노했다 - Zinit (구명 Zplugin)
TL;DR
2020.03.06 추가
2020.01.19에서 Zplugin은 Zinit이라는 이름으로 변경된 것 같습니다.
명칭 변경에 따라 본 기사의 내용도 Zinit용으로 변경했습니다.
( zdharma/zinit 부터)
그럼에도 불구하고 원래 Zplugin 사용자가해야 할 일은 특별히 없습니다.
Zinit으로 마이그레이션하는 경우 변경해야 할 사항은 두 가지입니다.
zplugin를 zinit로 변경 소개
zsh의 시작 속도를 높이려고했습니다.
zplug에서 ZpluginZinit으로 갈아타는 것만으로 시작 시간을 약 1.5초에서 약 0.4초까지 단축할 수 있었습니다.
또한, 기동 시간은 이하의 커맨드로 계측했습니다. 참고치 정도로 생각해 주세요.
$ time ( zsh -i -c exit )
 우선 현재
원래 zsh 시작 시간은 약 1.5초였습니다. (설정 파일은 zcompile 완료)
( zsh -i -c exit; )  1.04s user 0.40s system 94% cpu 1.519 total
( zsh -i -c exit; )  1.00s user 0.39s system 94% cpu 1.462 total
( zsh -i -c exit; )  1.02s user 0.40s system 94% cpu 1.502 total
사용하는 플러그인은 다음 세 가지입니다. 말하지 않고 알려진 zplug 신세를지고 있습니다.
$ time ( zsh -i -c exit )
원래 zsh 시작 시간은 약 1.5초였습니다. (설정 파일은 zcompile 완료)
( zsh -i -c exit; )  1.04s user 0.40s system 94% cpu 1.519 total
( zsh -i -c exit; )  1.00s user 0.39s system 94% cpu 1.462 total
( zsh -i -c exit; )  1.02s user 0.40s system 94% cpu 1.502 total
사용하는 플러그인은 다음 세 가지입니다. 말하지 않고 알려진 zplug 신세를지고 있습니다.
momo-lab/zsh-abbrev-alias : 약어를 전개해 준다
zsh-users/zsh-syntax-highlighting : 실행 가능한 명령에 색칠
zsh-users/zsh-completions : 명령 완성
그건 그렇고, 괜찮은 상태의 zsh 시작은 폭속입니다.
( zsh -i -c exit; )  0.00s user 0.00s system 79% cpu 0.011 total
느린 원인 찾기
먼저 .zshenv의 시작 부분에 다음을 추가합니다.
.zshenvzmodload zsh/zprof && zprof
그런 다음 .zshrc의 끝에 다음을 추가합니다.
.zshrcif (which zprof > /dev/null) ;then
  zprof | less
fi
결과는 다음과 같습니다. 병목이되어있는 것은 플러그인 관련 같다 (적당).
num  calls                time                       self            name
-----------------------------------------------------------------------------------
 1)    1         254.77   254.77   44.29%    253.25   253.25   44.02%  __zplug::log::write::info
 2)    5          90.50    18.10   15.73%     90.50    18.10   15.73%  __zplug::io::print::f
 3)    2          31.36    15.68    5.45%     31.36    15.68    5.45%  compaudit
 4)    2          61.74    30.87   10.73%     30.39    15.19    5.28%  compinit
...
 ZpluginZinit
 
zmodload zsh/zprof && zprof
if (which zprof > /dev/null) ;then
  zprof | less
fi
num  calls                time                       self            name
-----------------------------------------------------------------------------------
 1)    1         254.77   254.77   44.29%    253.25   253.25   44.02%  __zplug::log::write::info
 2)    5          90.50    18.10   15.73%     90.50    18.10   15.73%  __zplug::io::print::f
 3)    2          31.36    15.68    5.45%     31.36    15.68    5.45%  compaudit
 4)    2          61.74    30.87   10.73%     30.39    15.19    5.28%  compinit
...

ZpluginZinit이라는 플러그인 매니저가 빠르다고 해서 시험해 보는 것에. ( dotfiles를 깨끗하게 깨끗하게하는 김에 노출 - Qiita )
설치는 간단하며 다음을 수행하면됩니다 (불안한 경우 공식 README).
~/.zinit/bin에 Zinit이 설치됩니다.$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/zdharma/zinit/master/doc/install.sh)"
그런 다음 ZpluginZinit에 대해
.zshrc를 다시 씁니다..zshrc
-source ~/.zplug/init.zsh
-zplug 'momo-lab/zsh-abbrev-alias' # 略語を展開する
-zplug 'zsh-users/zsh-syntax-highlighting' # 実行可能なコマンドに色付け
-zplug 'zsh-users/zsh-completions' # 補完
-# Install check
-if ! zplug check --verbose; then
-  printf 'Install? [y/N]: '
-  if read -q; then
-    echo; zplug install
-  fi
-fi
-zplug load --verbose
+### Added by Zplugin's installer
+source "${HOME}/.zinit/bin/zinit.zsh"
+autoload -Uz _zinit
+(( ${+_comps} )) && _comps[zinit]=_zinit
+zinit load momo-lab/zsh-abbrev-alias # 略語を展開する
+zinit load zsh-users/zsh-syntax-highlighting # 実行可能なコマンドに色付け
+zinit load zsh-users/zsh-completions # 補完
그 결과 시작 시간이 약 0.4초가 되었습니다. 이것이라면 거의 시작 시간이 걱정되지 않습니다. ZpluginZinit 공포.
( zsh -i -c exit; )  0.26s user 0.13s system 93% cpu 0.414 total
( zsh -i -c exit; )  0.26s user 0.13s system 93% cpu 0.417 total
( zsh -i -c exit; )  0.24s user 0.12s system 94% cpu 0.379 total
ZpluginZinit으로 더욱 가속화
 지연 로드
ice wait를 사용하여 플러그인을 지연 로드할 수 있습니다.
이것이 매우 강력하고, 예를 들면 다음과 같이 ice wait'0' 로 하면(자), zsh 가 기동한 후에 0초 두고 hoge/hoge 플러그인을 읽어들입니다.
.zshrczinit ice wait'0'; zinit load hoge/hoge # プラグイン読み込み
시작할 때 필요한 플러그인이 아니면 지연 로드해도 문제가 없을 것입니다. 즉, 이 0초 지연 로드에 의해 기동이 더욱 고속화됩니다.
저자는 두 개의 플러그인을 지연로드합니다.
.zshrczinit load momo-lab/zsh-abbrev-alias # 略語を展開する
- zinit load zsh-users/zsh-syntax-highlighting # 実行可能なコマンドに色付け
- zinit load zsh-users/zsh-completions # 補完
zinit load momo-lab/zsh-abbrev-alias # 略語を展開する
+ zinit ice wait'!0'; zinit load zsh-users/zsh-syntax-highlighting # 実行可能なコマンドに色付け
+ zinit ice wait'!0'; zinit load zsh-users/zsh-completions # 補完
(wait'0' 대신 wait'!0'로 설정하면 읽기 완료 메시지가 표시되지 않습니다.)
지연 로드 후의 기동 시간은 약 0.3초가 되었습니다! ZpluginZinit 공포.
( zsh -i -c exit; )  0.15s user 0.08s system 93% cpu 0.240 total
( zsh -i -c exit; )  0.16s user 0.08s system 91% cpu 0.264 total
( zsh -i -c exit; )  0.17s user 0.09s system 87% cpu 0.293 total
 요약
ZpluginZinit의 도입으로, zsh의 기동 시간을 약 1.5초→약 0.4초→약 0.3초까지 단축할 수 있었습니다.
ZpluginZinit보다 빠른 플러그인 관리자를 알고 있다면 알려주세요.
 여담 : 제목 정보
이 캐치 타이틀은 복사 메카에서 자동 생성되었습니다.
 참고
zinit ice wait'0'; zinit load hoge/hoge # プラグイン読み込み
zinit load momo-lab/zsh-abbrev-alias # 略語を展開する
- zinit load zsh-users/zsh-syntax-highlighting # 実行可能なコマンドに色付け
- zinit load zsh-users/zsh-completions # 補完
zinit load momo-lab/zsh-abbrev-alias # 略語を展開する
+ zinit ice wait'!0'; zinit load zsh-users/zsh-syntax-highlighting # 実行可能なコマンドに色付け
+ zinit ice wait'!0'; zinit load zsh-users/zsh-completions # 補完
( zsh -i -c exit; )  0.15s user 0.08s system 93% cpu 0.240 total
( zsh -i -c exit; )  0.16s user 0.08s system 91% cpu 0.264 total
( zsh -i -c exit; )  0.17s user 0.09s system 87% cpu 0.293 total
ZpluginZinit의 도입으로, zsh의 기동 시간을 약 1.5초→약 0.4초→약 0.3초까지 단축할 수 있었습니다.
ZpluginZinit보다 빠른 플러그인 관리자를 알고 있다면 알려주세요.
여담 : 제목 정보
이 캐치 타이틀은 복사 메카에서 자동 생성되었습니다.
 참고
Reference
이 문제에 관하여([zsh 고속화] 에~, 그런 플러그인 매니저가 있다면 더 빨리 가르쳐줘, 라고 누나가 분노했다 - Zinit (구명 Zplugin)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/9sako6/items/23b164a95b91c644aade텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)