[zsh 고속화] 에~, 그런 플러그인 매니저가 있다면 더 빨리 가르쳐줘, 라고 누나가 분노했다 - Zinit (구명 Zplugin)

8286 단어 zpluginZshzinit

TL;DR


  • zplug에서 ZpluginZinit까지

  • 2020.03.06 추가



    2020.01.19에서 Zplugin은 Zinit이라는 이름으로 변경된 것 같습니다.
    명칭 변경에 따라 본 기사의 내용도 Zinit용으로 변경했습니다.
  • 19-01-2020
  • The name has been changed to Zinit based on the results of the poll.


  • ( zdharma/zinit 부터)

    그럼에도 불구하고 원래 Zplugin 사용자가해야 할 일은 특별히 없습니다.
    Zinit으로 마이그레이션하는 경우 변경해야 할 사항은 두 가지입니다.
  • Zinit 설치
  • .zshrc의 zpluginzinit로 변경

  • 소개



    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 신세를지고 있습니다.

  • 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의 시작 부분에 다음을 추가합니다.

    .zshenv
    zmodload zsh/zprof && zprof
    

    그런 다음 .zshrc의 끝에 다음을 추가합니다.

    .zshrc
    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




  • zdharma/zplugin
  • zdharma/zinit

  • 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 플러그인을 읽어들입니다.

    .zshrc
    zinit ice wait'0'; zinit load hoge/hoge # プラグイン読み込み
    

    시작할 때 필요한 플러그인이 아니면 지연 로드해도 문제가 없을 것입니다. 즉, 이 0초 지연 로드에 의해 기동이 더욱 고속화됩니다.

    저자는 두 개의 플러그인을 지연로드합니다.

    .zshrc
    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 # 補完
    

    (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보다 빠른 플러그인 관리자를 알고 있다면 알려주세요.

    여담 : 제목 정보



    이 캐치 타이틀은 복사 메카에서 자동 생성되었습니다.

    참고


  • zsh 시작이 느리기 때문에 어떻게 든하고 싶다 - Qiita
  • zsh의 시작이 느리기 때문에 어떻게든하고 싶습니다 2 - Qiita
  • zsh가 느리게 시작되면 zprof로 프로파일 링해보십시오 - Qiita
  • dotfiles를 깨끗하게 깨끗하게하는 김에 노출 - Qiita
  • 좋은 웹페이지 즐겨찾기