느려진 zsh 터미널 성능 최적화
개발할 때는 주로 neovim을 사용하다 보니, 터미널에서 모든 작업을 처리한다.
하루에도 여러 변 쉘을 껏다 키기에, 켜지는 속도가 느리면 거슬리게 된다.
어느 순간부터 쉘이 켜지는 속도가 거슬리게 되어서 최적화를 시도 하게 되었다.
목차
원인 찾기
zsh-bench을 돌려보았다.
# 설치하고 실행
> ~/zsh-bench/zsh-bench
눈 여겨볼건 이거다. first_prompt_lag_ms=1409.696
처음 키고 프롬프트 입력할수 있을때 까지 1409ms
가 걸린다.
그러면 이제 zsh/zprof
를 사용하여 무엇 때문에 느린지 살펴보자
# .zshrc 에 해당 라인 추가
zmodload zsh/zprof
# 실행
> zprof
nvm이 많이 느린편인걸 알 수 있다.
개선 하기
nvm을 제거하고 하는김에 플러그인 매니저까지 변경하였다.
본인은 nix1를 사용하기에 아래와 같이 설정을 하였다.
# configuration.nix
{
environment.systemPackages = with pkgs; [
...,
volta
]
programs.zsh = {
enable = true;
enableBashCompletion = false;
enableCompletion = false;
variables = {
ZDOTDIR = "$HOME/.config/zsh";
};
promptInit = ''
fpath=(${pkgs.antidote}/share/antidote/functions $fpath)
autoload -Uz antidote
'';
};
}
결과
first_prompt_lag_ms가 39.118ms
로 줄었다. (97.22% 빨라짐)
volta
도 nvm 보다 휠씬 간단하고 빠르다.
아주 쾌적하고 만족스럽다.🙂
추가적으로
omz
프레임워크를 벗어나니 sub-string-search
기능이 빠져있다.
zsh-vi 모드를 사용하기에 해당 기능도 넣어주었다.
function zvm_before_init() {
# up, down 시 히스토리 substring search
autoload -U history-search-end
zle -N history-beginning-search-backward-end history-search-end
zle -N history-beginning-search-forward-end history-search-end
# zsh-vi-mode
zvm_bindkey viins '^[[A' history-beginning-search-backward-end
zvm_bindkey viins '^[[B' history-beginning-search-forward-end
zvm_bindkey vicmd '^[[A' history-beginning-search-backward-end
zvm_bindkey vicmd '^[[B' history-beginning-search-forward-end
}
설정은 제dotfiles에서 볼 수 있습니다.
Footnotes
-
nix는 선언적이고 재현 가능한 방식으로 소프트웨어 패키지를 관리할 수 있는 도구입니다. 자세한 내용은 nix 공식 웹사이트를 참조하세요. ↩