2010-12-04 6 views

Respuesta

46

Trate de añadir esto al principio del archivo:

# set the trace prompt to include seconds, nanoseconds, script name and line number 
# This is GNU date syntax; by default Macs ship with the BSD date program, which isn't compatible 
PS4='+$(date "+%s:%N") %N:%i> ' 
# save file stderr to file descriptor 3 and redirect stderr (including trace 
# output) to a file with the script's PID as an extension 
exec 3>&2 2>/tmp/startlog.$$ 
# set options to turn on tracing and expansion of commands contained in the prompt 
setopt xtrace prompt_subst 

y esto al final:

# turn off tracing 
unsetopt xtrace 
# restore stderr to the value saved in FD 3 
exec 2>&3 3>&- 

y usted debe obtener un registro detallado que muestra el tiempo de la ejecución epoch_second.nanosecond de cada línea. Tenga en cuenta que se requiere que GNU date (y soporte de sistema operativo) tenga una salida de nanosegundos.

Editar:

comentarios añadidos

Edición 2:

Si tiene zsh 4.3.12 o posterior, debe ser capaz de establecer PS4 como éste en lugar de utilizar el comando date:

zmodload zsh/datetime 
setopt promptsubst 
PS4='+$EPOCHREALTIME %N:%i> ' 

que debe trabajar tanto en Linux y OS X para dar que nanosegundo precisión.

+0

Agregué un espacio muy importante a lo que originalmente publiqué. –

+1

Asegúrese de 'setopt prompt_subst' también; de lo contrario, la parte' $ (date ..) 'no será sustituida. – blueyed

+0

¿Podría agregar algunas notas más sobre lo que cada línea anterior está haciendo exactamente? –

2

Usted puede comenzar su temporizador en el primer punto sospechosa en su ~/.zshrc (o al principio):

integer t0=$(date '+%s') # move this around 
... maybe something suspect ... 

# End of zshrc 
function { 
    local -i t1 startup 
    t1=$(date '+%s') 
    startup=$((t1 - t0)) 
    [[ $startup -gt 1 ]] && print "Hmm, poor shell startup time: $startup" 
} 
unset t0 

Esto me avisa si alguna vez veo un inicio demasiado lento, y lo dejo en tan una envoltura permanente. Para obtener medidas más sofisticadas, existe un módulo zsh llamado zprof. Es tan simple como envolver temporalmente el contenido de su ~/.zshrc en un zmodload zsh/zprof y zprof. Esto eliminará algunas tablas de creación de perfiles que son lo suficientemente fáciles de interpretar.

Más información en zshmodules(1) página de manual.

Cuando encuentro cosas que son particularmente lenta (init rbenv, vcs_info de salida para-cambios, antígeno, NVM,-mime-configuración zsh, intérprete de la versión de cheques, etc.) que añadir SLOW comentarios como recordatorios, e intento para encontrar soluciones. Las startups lentas pueden causar mucho dolor, por lo que tiendo a evitar los paquetes/frameswords de zsh cuyo funcionamiento interno no creo. compinit es la cosa más lenta con la que estoy dispuesto a vivir y es ~ la mitad del tiempo total de inicio.

Cuestiones relacionadas