Fasd: 减缓

创建于 2013-03-10  ·  11评论  ·  资料来源: clvv/fasd

今天一直在分析我的终端并注意到fasdz慢得多。

z 被添加到我的 .zshrc 中: . brew --prefix /etc/profile.d/z.sh

时尚与: eval "$(fasd --init posix-alias zsh-hook zsh-ccomp zsh-ccomp-install zsh-wcomp zsh-wcomp-install)"

使用zprof并专门启用它们时的结果是:

快进

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

使用简单的设置有很大帮助: eval "$(fasd --init posix-alias zsh-hook)"

但与z相比仍然很慢。

fasd(简单)

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

由于 fasd 在每次文件夹更改时都运行,因此速度下降相当明显。

最有用的评论

我不知道这是否仍然相关,但使用这段代码为我解决了这个问题:

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

所有11条评论

我怀疑主要原因是fasd作为preexec的可执行文件被调用两次。 如果fasd来自 zsh( source =fasd应该在 zsh 中工作),则可以最小化此开销。

此外,为了使比较更加公平,您可以告诉 fasd 和 z 使用相同的数据库,因为 fasd 只使用 z 的数据格式。

我查看了代码,似乎可以将两个可执行调用压缩为一个。 当我有时间时,我会玩弄代码。

有任何更新吗? 我很想使用 fasd,但现在它太慢了。

将 --sanitize sed 正则表达式内联到函数中也有一定帮助,但它仍然很慢。

我也有减速使用简单: eval "$(fasd --init auto)" in .bash_profile。

@sindresorhus分析听起来很有趣。 介意分享你是如何做到的?

@wamatt它在问题文本中。

我还观察到 fasd 显着减慢了我的外壳。
我的.zshrceval "$(fasd --init auto)" .zshrc

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

2017 年仍然缓慢 :)

安装 fasd 后我注意到的第一件事就是速度变慢,所以我也做了一些分析。

使用我的默认~/.zshrc

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

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

与 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

使用 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

所以 z 增加 < 1 ms,而 fasd 增加 39.3 ms。

我不知道这是否仍然相关,但使用这段代码为我解决了这个问题:

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

从这里
我怀疑主要原因是fasd作为preexec的可执行文件被调用两次。 如果fasd来自 zsh( source =fasd应该在 zsh 中工作),则可以最小化此开销。

源语句中的=有意义吗?

我不知道这是否仍然相关,但使用这段代码为我解决了这个问题:

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

如果我使用下面的zsh --init zsh-hook输出,我看不到任何性能差异。
不确定它是否相关,但我将下面的片段保存在缓存文件中,然后将其作为源文件,而不是对输出执行eval

# 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
此页面是否有帮助?
0 / 5 - 0 等级

相关问题

sypl picture sypl  ·  12评论

mhlinder picture mhlinder  ·  3评论

ghost picture ghost  ·  12评论

simendsjo picture simendsjo  ·  6评论

pearofducks picture pearofducks  ·  7评论