2010-12-04 3 views

Antwort

46

Versuchen Hinzufügen dieses am Anfang der Datei:

# 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 

und dies am Ende:

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

Und Sie sollten ein detailliertes Logbuch zeigt den epoch_second.nanosecond Zeitpunkt der Ausführung erhalten jeder Zeile. Beachten Sie, dass GNU date (und OS-Unterstützung) eine Nanosekunden-Ausgabe benötigt.

Edit:

hinzugefügt Kommentare

Edit 2:

Wenn Sie zsh 4.3.12 oder höher haben, sollten Sie in der Lage sein PS4 so zu setzen, anstatt den Befehl date:

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

die sowohl unter Linux als auch unter OS X arbeiten sollte, um Ihnen eine Genauigkeit im Nanosekundenbereich zu geben.

+0

Ich habe einen sehr wichtigen Platz zu dem hinzugefügt, was ich ursprünglich gepostet habe. –

+1

Stellen Sie sicher, dass Sie "setopt prompt_subst" auch setzen - sonst wird der '$ (date ..)' Teil nicht ersetzt. – blueyed

+0

Könntest du bitte noch ein paar Anmerkungen darüber machen, was jede Zeile genau macht? –

2

Sie können Ihre Timer beim ersten verdächtigen Punkt beginnen in Ihrem ~/.zshrc (oder am Anfang):

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 

Diese mich alarmiert, wenn ich jemals einen zu langsamen Start zu sehen, und ich lasse es in als ein permanenter Wrapper.

Für anspruchsvollere Messungen gibt es ein zsh Modul zprof genannt. Es ist so einfach wie vorübergehend den Inhalt Ihrer ~/.zshrc in zmodload zsh/zprof und zprof zu wickeln. Dadurch werden einige ausführliche Profiltabellen ausgegeben, die leicht zu interpretieren sind.

Weitere Informationen in zshmodules(1) manpage.

Wenn ich Dinge, die besonders langsam sind (rbenv init, vcs_info Check-for-Änderungen, Antigen, NVM, zsh-mime-Setup, Dolmetscher Versionsprüfung, usw.) Ich füge SLOW Kommentare als Erinnerungen, und versuchen, Workarounds finden. Langsame Startups können eine Menge Kummer verursachen, daher tendiere ich dazu, zsh Pakete/Framewords zu vermeiden, deren innere Arbeitsweise ich nicht kenne. Compinit ist die langsamste Sache, mit der ich leben will und ist ~ die Hälfte der gesamten Startzeit.

Verwandte Themen