J'ai profilé mon terminal aujourd'hui et j'ai remarqué que fasd
est considérablement plus lent que z
.
z a été ajouté à mon .zshrc avec : .
brew --prefix /etc/profile.d/z.sh
fasd avec : eval "$(fasd --init posix-alias zsh-hook zsh-ccomp zsh-ccomp-install zsh-wcomp zsh-wcomp-install)"
Les résultats lors de l'utilisation de zprof
avec eux exclusivement activés étaient :
num calls time self name
-----------------------------------------------------------------------------------
1) 3 1527.75 509.25 83.55% 1527.75 509.25 83.55% _fasd_preexec
2) 2 107.40 53.70 5.87% 107.40 53.70 5.87% compaudit
3) 3 47.98 15.99 2.62% 47.98 15.99 2.62% precmd
4) 1 153.86 153.86 8.41% 46.46 46.46 2.54% compinit
5) 6 39.73 6.62 2.17% 39.73 6.62 2.17% _setup
6) 3 27.72 9.24 1.52% 27.72 9.24 1.52% preexec
num calls time self name
-----------------------------------------------------------------------------------
1) 2 44.18 22.09 48.69% 44.18 22.09 48.69% compaudit
2) 1 67.12 67.12 73.98% 22.95 22.95 25.29% compinit
3) 1 15.62 15.62 17.22% 15.62 15.62 17.22% precmd
4) 1 7.73 7.73 8.52% 7.73 7.73 8.52% preexec
5) 1 0.14 0.14 0.15% 0.14 0.14 0.15% _z
6) 1 0.26 0.26 0.29% 0.12 0.12 0.13% _z_precmd
Cela aide beaucoup d'utiliser simplement la configuration simple : eval "$(fasd --init posix-alias zsh-hook)"
Mais toujours lent par rapport à z
.
num calls time self name
-----------------------------------------------------------------------------------
1) 3 316.83 105.61 47.56% 316.83 105.61 47.56% _fasd_preexec
2) 2 146.31 73.15 21.96% 146.31 73.15 21.96% compaudit
3) 1 228.45 228.45 34.29% 82.14 82.14 12.33% compinit
4) 3 36.87 12.29 5.53% 36.87 12.29 5.53% precmd
5) 3 35.78 11.93 5.37% 35.78 11.93 5.37% _setup
6) 3 24.23 8.08 3.64% 24.23 8.08 3.64% preexec
Étant donné que fasd est exécuté à chaque changement de dossier, il s'agit d'un ralentissement assez notable.
Je soupçonne que la raison principale est que fasd
est appelé deux fois en tant qu'exécutable dans preexec
. Cette surcharge peut être minimisée si fasd
provient de zsh ( source =fasd
devrait fonctionner dans zsh).
De plus, pour rendre la comparaison plus juste, vous pouvez dire à fasd et z d'utiliser la même base de données, puisque le fasd utilise simplement le format de données de z.
J'ai regardé le code et il semble possible de condenser deux appels exécutables en un seul. Je jouerai avec le code quand j'aurai le temps.
Des mises à jour à ce sujet ? J'adorerais utiliser fasd, mais pour le moment, c'est tout simplement trop lent.
incorporer les expressions régulières --sanitize sed dans la fonction aide également quelque peu, mais c'est toujours très lent.
j'ai aussi des ralentissements en utilisant simplement: eval "$(fasd --init auto)"
dans .bash_profile.
Le profilage de
@wamatt C'est dans le texte du problème.
J'observe également que le fasd ralentit considérablement ma coquille.
J'ai eval "$(fasd --init auto)"
dans mon .zshrc
.
zsh 5.0.8 (x86_64-apple-darwin14.3.0)
sur OSX.
$ zprof
num calls time self name
-----------------------------------------------------------------------------------
1) 6 194,36 32,39 92,69% 194,36 32,39 92,69% _fasd_preexec
2) 6 5,96 0,99 2,84% 5,96 0,99 2,84% _powerline_get_main_keymap_name
3) 6 5,29 0,88 2,52% 5,29 0,88 2,52% _powerline_set_true_keymap_name
4) 24 2,40 0,10 1,15% 2,40 0,10 1,15% url-quote-magic
5) 6 11,82 1,97 5,64% 0,57 0,09 0,27% _powerline_set_main_keymap_name
6) 6 0,30 0,05 0,14% 0,30 0,05 0,14% zle-line-finish
7) 6 0,27 0,05 0,13% 0,27 0,05 0,13% zle-line-init
8) 6 0,19 0,03 0,09% 0,19 0,03 0,09% omz_termsupport_precmd
9) 6 0,18 0,03 0,09% 0,18 0,03 0,09% omz_termsupport_preexec
10) 6 0,09 0,02 0,04% 0,09 0,02 0,04% _powerline_set_jobnum
11) 6 0,06 0,01 0,03% 0,06 0,01 0,03% omz_termsupport_cwd
-----------------------------------------------------------------------------------
1) 6 194,36 32,39 92,69% 194,36 32,39 92,69% _fasd_preexec
Encore lent en 2017 :)
Le ralentissement a été la première chose que j'ai remarquée après l'installation de fasd, j'ai donc également fait du profilage.
Avec mon ~/.zshrc
par défaut
$ time (for i in {1..20}; do zsh -ic 'exit'; done)
================
CPU 87%
user 1.913
system 0.880
total 3.207
Avec z : source /usr/share/z/z.sh
$ time (for i in {1..20}; do zsh -ic 'exit'; done)
================
CPU 87%
user 1.837
system 0.970
total 3.213
Avec fasd : eval "$(fasd --init posix-alias zsh-hook zsh-ccomp zsh-ccomp-install zsh-wcomp zsh-wcomp-install)"
$ time (for i in {1..20}; do zsh -ic 'exit'; done)
================
CPU 83%
user 2.207
system 1.123
total 3.993
Donc z ajoute < 1 ms, tandis que fasd ajoute 39,3 ms.
Je ne sais pas si cela est toujours d'actualité, mais l'utilisation de cet extrait de code résout le problème pour moi :
eval "$(fasd --init posix-alias)" # Anything you want enabled BUT zsh-hook
_fasd_preexec() {
{ eval "fasd --proc \$(fasd --sanitize \$2)"; } &|
}
autoload -Uz add-zsh-hook
add-zsh-hook preexec _fasd_preexec
d'ici
Je soupçonne que la raison principale est quefasd
est appelé deux fois en tant qu'exécutable danspreexec
. Cette surcharge peut être minimisée sifasd
provient de zsh (source =fasd
devrait fonctionner dans zsh).
Est-ce que =
dans l'instruction source est significatif ?
Je ne sais pas si cela est toujours d'actualité, mais l'utilisation de cet extrait de code résout le problème pour moi :
eval "$(fasd --init posix-alias)" # Anything you want enabled BUT zsh-hook _fasd_preexec() { { eval "fasd --proc \$(fasd --sanitize \$2)"; } &| } autoload -Uz add-zsh-hook add-zsh-hook preexec _fasd_preexec
Je ne vois aucune différence de performance si je vais avec la sortie de zsh --init zsh-hook
qui est ci-dessous.
Je ne sais pas si c'est pertinent, mais j'enregistre le ci-dessous coupé dans un fichier cache, puis je le source au lieu de faire un eval
sur la sortie.
# add zsh hook
_fasd_preexec() {
{ eval "fasd --proc $(fasd --sanitize $1)"; } >> "/dev/null" 2>&1
}
autoload -Uz add-zsh-hook
add-zsh-hook preexec _fasd_preexec
Commentaire le plus utile
Je ne sais pas si cela est toujours d'actualité, mais l'utilisation de cet extrait de code résout le problème pour moi :