짧은 버전: zsh 프롬프트의 각 렌더링을 분석하는 방법은 무엇입니까?
긴 버전: 최근에 플러그인(rupa/z)을 발견했는데, 설치 후 zsh 프롬프트 렌더링 시간이 크게 단축되었습니다. 이 플러그인이 로드 시 zsh 프롬프트 렌더링 시간에 얼마나 영향을 미치는지 측정하고 싶습니다.
예를 들어, 프롬프트 렌더링 시간이라고 말할 때 명령을 실행할 때 첫 번째 zsh 프롬프트가 나타나는 데 걸리는 시간을 의미하는 것은 아닙니다 exec zsh
(명령을 실행하여 달성됨 time zsh -i -c "print -n"
).
zsh가 완전히 로드되고 다시 메시지가 표시되는 데 걸리는 시간에 대해 이야기하고 있습니다. 즉, 나는 이것을 달성하고 싶습니다 :
~ $ ls (when i hit enter, start counting)
code/ notes/ file.txt
~ $ (stop counting when this prompt appears. show me elapsed time)
나는 할 수있다?
답변1
고쳐 쓰다:이용 zle-line-init
(감사합니다.자일스팁을 원하시면)
정확히 분석은 아니지만 질문의 텍스트를 보면 주로 플러그인에 필요한 대기 시간을 측정하는 데 관심이 있는 것 같습니다.
이 추정치를 얻는 한 가지 방법은 precmd
매번 실행되는 후크를 활용하는 것입니다.앞으로zle-line-init
라인 편집기가 시작될 때마다 실행되는 힌트 및 위젯을 렌더링합니다 .
다음은 트릭을 수행해야합니다. .~/.zshrc
# set type of SECONDS and start to float to increase precision
typeset -F SECONDS start
# define precmd hook function
precmd () {
# save time since start of zsh in start
start=$SECONDS
}
# define zle-line-init function
zle-line-init () {
# print time since start was set after prompt
PREDISPLAY="[$(( $SECONDS - $start ))] "
}
# link the zle-line-init widget to the function of the same name
zle -N zle-line-init
이렇게 하면 각 프롬프트의 경과 시간이 다음과 같이 프롬프트 뒤의 괄호 안에 기록됩니다.
prompt% [0.00013200000000779255]
노트:precmd
함수가 이미 정의된 경우 zle-line-init
해당 함수 본문을 기존 정의에 추가해야 합니다. precmd
for를 맨 처음에 배치하고 for를 맨 끝에 배치해야 합니다 . zle-line-init
두 항목의 기존 내용이 힌트(또는 힌트처럼 보이는 것)를 렌더링하는 데 걸리는 시간에 영향을 미칠 수 있기 때문입니다.
precmd
정의되어 있는지 확인하려면 를 실행하세요whence -c precmd
.zle-line-init
달리기를 위해zle -lL zle-line-init
. 설정되어 있으면 다음과 같은 줄이 인쇄됩니다.zle -N zle-line-init _zsh_highlight_widget_zle-line-init
여기서 마지막 단어는 링크 함수의 이름입니다(동일한 이름을 가질 필요는 없음).