С помощью этой команды вы сможете измерять время запуска, включая получение rc-файлов (+ один вызов печати, который не должен увеличивать накладные расходы):
time zsh -i -c "print -n"
time bash -i -c "echo -n"
С более чем 1000 строк в моем .zshrc
это занимает 0,3 секунды на моей установке Cygwin . И нет, это действительно не high-end-машина (iCore2Duo P8700).
Что касается времени рендеринга:
в bash
это возможно time
встроенных команд. Тем не менее, я не знаю возможности визуализации $PS1
в качестве приглашения.
в zsh
все наоборот, с помощью print -P $PS1 $RPS1
вы можете вывести подсказку командой print. (man zshbuiltins: " [print] -P Выполнить быстрое расширение"). Но кажется, что время не работает со встроенными командами. Вот почему я взломал это:
cumul=0; for i ({0..99}) {
start=$(date +%s.%N)
end=$(date +%s.%N)
(( cumul+= (end-start) ))
}
overhead=$((cumul/100.))
cumul=0; for i ({0..99}) {
start=$(date +%s.%N)
print -P $PS1 $RPS1
end=$(date +%s.%N)
(( cumul+= (end-start) ))
}
print $((cumul/100. - overhead))
Во-первых, это измеряет накладные расходы, вызванные командами date
. Это делается 100 раз для лучшей статистики.
Затем включается print -P $PS1 $RPS1
, также выполняется 100 раз, и накладные расходы, определенные в первой части, вычитаются. Последовательные вызовы показывают, что вы не можете доверять цифре 1 мс, но цифра 10 мс кажется надежной. С ожидаемым значением порядка секунд, которого должно быть достаточно.
Но, как @Michael Kjörling уже упоминал в комментарии, приглашение должно быть выполнено в кратчайшие сроки. Так что либо вы должны подумать о том, как оптимизировать вашу подсказку, либо принять во внимание, что, по моему опыту, время рендеринга подсказок (как и в вашем вопросе) - лишь малая часть времени отображения подсказок. (Я говорю здесь в основном о оболочке Z, но я предполагаю, что в bash есть похожие понятия.) Потому что есть другие функции, которые выполняются до отображения подсказки. Вот что сразу приходит мне в голову:
precmd
: выполняется перед каждым приглашением; используйте which precmd
чтобы увидеть, что это такое в вашем случае
- если у вас включена опция
sharedhistory
, файл ~/.zsh_history
(или как вы его назвали) будет прочитан. Особенно, если ваш домашний каталог находится в удаленной файловой системе, может возникнуть значительная задержка. Я также наблюдаю время от времени за несколько секунд до появления подсказки, когда сервер NFS сильно загружен.
Инструментом для подробного анализа временных требований внешних программ / внутренних функций является модуль zsh/zprof
, загруженный
zmodload zsh/zprof
От man zshmodules
: «При загрузке zsh/zprof вызывает профилирование функций оболочки. Результаты профилирования могут быть получены с помощью встроенной команды zprof, предоставляемой этим модулем. "