Il semble que mon shell prend façon trop long pour démarrer. Y a-t-il un moyen de le profiler pour que je puisse comprendre ce qui le ralentit le plus?Puis-je profiler mon .zshrc/.zshenv?
Répondre
Essayez d'ajouter ceci au début du fichier:
# 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
et ceci à la fin:
# turn off tracing
unsetopt xtrace
# restore stderr to the value saved in FD 3
exec 2>&3 3>&-
Et vous devriez obtenir un journal détaillé indiquant le temps de epoch_second.nanosecond de l'exécution de chaque ligne. Notez que GNU date
(et le support OS) est requis pour avoir une sortie de nanosecondes.
Edit:
commentaires ajoutés
Edit 2:
Si vous avez zsh 4.3.12 ou plus tard, vous devriez être en mesure de définir PS4
comme celui-ci au lieu d'utiliser la commande date
:
zmodload zsh/datetime
setopt promptsubst
PS4='+$EPOCHREALTIME %N:%i> '
qui devrait fonctionner sur Linux et OS X pour vous donner une précision de l'ordre de la nanoseconde.
Vous pouvez commencer votre minuterie au premier point suspect dans votre ~/.zshrc
(ou au début):
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
Cela me avertit si jamais je vois un démarrage trop lent, et je laisse en tant que un emballage permanent.
Pour les mesures plus sophistiquées, il existe un module zsh appelé zprof
. C'est aussi simple que d'emballer temporairement le contenu de votre ~/.zshrc
dans un zmodload zsh/zprof
et zprof
. Cela va vider certaines tables de profilage verbeux qui sont assez faciles à interpréter.
Plus d'info dans zshmodules(1)
manpage.
Quand je trouve des choses qui sont particulièrement lents (rbenv init, vcs_info check-pour-changements, l'antigène, NVM, zsh-mime-configuration, la vérification de la version de l'interprète, etc.) Je ajouter SLOW
commentaires comme des rappels, et essayer pour trouver des solutions de contournement. Les démarrages lents peuvent causer beaucoup de chagrin, donc j'ai tendance à éviter les paquets/cadres de zsh dont je ne gêne pas le fonctionnement interne. compinit est la chose la plus lente avec laquelle je suis prêt à vivre et représente environ la moitié du temps de démarrage total.
J'ai ajouté un espace très important à ce que j'ai posté à l'origine. –
Assurez-vous de 'setopt prompt_subst', sinon la partie' $ (date ..) 'ne sera pas remplacée. – blueyed
Pourriez-vous s'il vous plaît ajouter quelques notes sur ce que chaque ligne ci-dessus fait exactement? –