Com este comando você deve ser capaz de comparar os tempos de inicialização, incluindo o fornecimento de arquivos rc (+ uma chamada de impressão, que não deve aumentar muito a sobrecarga):
time zsh -i -c "print -n"
time bash -i -c "echo -n"
Com mais de 1000 linhas no meu .zshrc
, isso leva 0,3 s na minha instalação do cygwin. E não, realmente não é uma máquina de ponta (iCore2Duo P8700).
Em relação ao tempo de renderização do prompt:
-
em
bash
, é possível usar os comandostime
builtin. No entanto, não sei a possibilidade de processar$PS1
como um prompt. -
em
zsh
é o contrário, comprint -P $PS1 $RPS1
você pode processar com um comando de impressão. (man zshbuiltins: " [print] -P Efetuar uma expansão rápida"). Mas parece que o tempo não funciona com comandos embutidos. É por isso que eu juntei este aqui: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))
Primeiro, isso mede a sobrecarga que é causada pelos comandos
date
. Isso é feito 100 vezes para melhores estatísticas. Em seguida, oprint -P $PS1 $RPS1
é incluído, também é executado 100 vezes e a sobrecarga determinada na primeira parte é subtraída. Invocações consecutivas mostram que você não pode confiar no dígito de 1 ms, mas o dígito de 10 ms parece confiável. Com um valor esperado na ordem de segundos que deve ser suficiente.
Mas, como @Michael Kjörling já mencionou em um comentário, o prompt deve render em nenhum momento. Então, você deve pensar em como otimizar seu prompt ou levar em conta que, na minha experiência, o tempo de renderização do prompt (como na sua pergunta) é apenas uma pequena parte da exibição do prompt tempo . (Eu falo aqui principalmente sobre o shell Z, mas eu assumo no bash que existem conceitos similares.) Porque existem outras funções que são executadas antes que o prompt seja exibido. Isto é o que vem imediatamente a minha mente:
-
precmd
: Executado antes de cada prompt; usewhich precmd
para ver o que é no seu caso - se você tiver a opção
sharedhistory
habilitada, o arquivo~/.zsh_history
(ou seja lá o nome que você tenha dado) será lido. Especialmente se o seu diretório home estiver em um sistema de arquivos remoto, um atraso significativo pode ser induzido. Eu também observo de vez em quando alguns segundos antes que o prompt seja exibido quando o servidor NFS está sobrecarregado.
Uma ferramenta para analisar os requisitos de tempo de programas externos / funções internas em detalhes é o módulo zsh/zprof
, carregado por
zmodload zsh/zprof
De man zshmodules
: "Quando carregado, o zsh / zprof faz com que as funções do shell sejam perfiladas. Os resultados de criação de perfil podem ser obtidos com o zprof
comando disponibilizado por este módulo. "