zsh에서 프롬프트 렌더링 시간을 분석하는 방법은 무엇입니까?

zsh에서 프롬프트 렌더링 시간을 분석하는 방법은 무엇입니까?

짧은 버전: 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해당 함수 본문을 기존 정의에 추가해야 합니다. precmdfor를 맨 처음에 배치하고 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
    

    여기서 마지막 단어는 링크 함수의 이름입니다(동일한 이름을 가질 필요는 없음).

관련 정보