Fasd: Lambat

Dibuat pada 10 Mar 2013  ·  11Komentar  ·  Sumber: clvv/fasd

Telah membuat profil Terminal saya hari ini dan memperhatikan bahwa fasd jauh lebih lambat dari z .

z telah ditambahkan ke .zshrc saya dengan: . brew --prefix /etc/profile.d/z.sh

fad dengan: eval "$(fasd --init posix-alias zsh-hook zsh-ccomp zsh-ccomp-install zsh-wcomp zsh-wcomp-install)"

Hasil saat menggunakan zprof dengan mereka diaktifkan secara eksklusif adalah:

fasd

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

Sangat membantu jika hanya menggunakan pengaturan sederhana: eval "$(fasd --init posix-alias zsh-hook)"

Tapi masih lambat dibandingkan dengan z .

fasd (sederhana)

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

Karena fasd dijalankan pada setiap perubahan folder, ini adalah perlambatan yang cukup nyata.

Komentar yang paling membantu

Saya tidak tahu apakah ini masih relevan, tetapi menggunakan potongan kode ini memperbaiki masalah bagi saya:

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

Semua 11 komentar

Saya menduga alasan utamanya adalah fasd dipanggil dua kali sebagai executable di preexec . Overhead ini dapat diminimalkan jika fasd bersumber dari zsh ( source =fasd harus bekerja di zsh).

Juga, untuk membuat perbandingan lebih adil, Anda dapat memberitahu fasd dan z untuk menggunakan database yang sama, karena fasd hanya menggunakan format data z.

Saya melihat kodenya dan sepertinya mungkin untuk menyingkat dua panggilan yang dapat dieksekusi menjadi satu. Saya akan bermain-main dengan kode ketika saya punya waktu.

Ada pembaruan tentang ini? Saya ingin menggunakan fasd, tetapi saat ini terlalu lambat.

memasukkan --sanitize sed regex ke dalam fungsi juga agak membantu, tetapi masih sangat lambat.

saya juga mengalami pelambatan hanya dengan menggunakan: eval "$(fasd --init auto)" di .bash_profile.

Profiling @sindresorhus terdengar menarik. pikiran berbagi bagaimana Anda melakukan itu?

@wamatt Ada di teks terbitan.

Saya juga mengamati bahwa fasd memperlambat shell saya secara signifikan.
Saya memiliki eval "$(fasd --init auto)" di .zshrc .

zsh 5.0.8 (x86_64-apple-darwin14.3.0) di 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

Masih lambat di 2017 :)

Perlambatan adalah hal pertama yang saya perhatikan setelah menginstal fasd, jadi saya juga melakukan beberapa pembuatan profil.

Dengan default saya ~/.zshrc

$ time (for i in {1..20}; do zsh -ic 'exit'; done)

================
CPU 87%
user    1.913
system  0.880
total   3.207

Dengan 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

Dengan 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

Jadi z menambah < 1 ms, sedangkan fasd menambah 39,3 ms.

Saya tidak tahu apakah ini masih relevan, tetapi menggunakan potongan kode ini memperbaiki masalah bagi saya:

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

dari sini
Saya menduga alasan utamanya adalah fasd dipanggil dua kali sebagai executable di preexec . Overhead ini dapat diminimalkan jika fasd bersumber dari zsh ( source =fasd harus bekerja di zsh).

Apakah itu = dalam pernyataan sumber bermakna?

Saya tidak tahu apakah ini masih relevan, tetapi menggunakan potongan kode ini memperbaiki masalah bagi saya:

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

Saya tidak melihat perbedaan kinerja jika saya menggunakan output zsh --init zsh-hook yang ada di bawah.
Tidak yakin apakah itu relevan tetapi saya menyimpan potongan di bawah ini dalam file cache dan kemudian sumber itu alih-alih melakukan eval atas output.

# 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
Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

ixil picture ixil  ·  5Komentar

mhlinder picture mhlinder  ·  3Komentar

rendybjunior picture rendybjunior  ·  14Komentar

ghost picture ghost  ·  12Komentar

rosshadden picture rosshadden  ·  6Komentar