Fasd: Lent

Créé le 10 mars 2013  ·  11Commentaires  ·  Source: clvv/fasd

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 :

fad

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

z

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 .

fasd (simple)

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.

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 :

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

Tous les 11 commentaires

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 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).

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
Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

ixil picture ixil  ·  5Commentaires

ghost picture ghost  ·  12Commentaires

mhlinder picture mhlinder  ·  3Commentaires

josephholsten picture josephholsten  ·  15Commentaires

sbglasius picture sbglasius  ·  5Commentaires