Jenv: 导出插件极大地减慢了 shell 响应

创建于 2017-10-29  ·  4评论  ·  资料来源: jenv/jenv

jenv enable-plugin export ,shell 响应非常缓慢。

$ # <= type enter here
$ # shell is active after about 0.3 seconds (slow!)
  • bash 版本:4.4.12(1)-release (x86_64-apple-darwin16.3.0)
  • jenv 0.4.4

time命令不反映慢)

最有用的评论

我也在 jenv 0.4.4 (但通过brew install jenv由自制软件安装)。

发生这种情况是因为_jenv_export_hook中的$HOME/.jenv/plugins/export/etc/jenv.d/init/export_jenv_hook.bash _jenv_export_hook函数在评估$PROMPT_COMMAND时在每个提示显示上被 bash 调用

通常这是可以的,但是_jenv_export_hook调用jenv javahome来设置 JAVA_HOME 值。 我认为jenv javahome是这里的罪魁祸首,它可能只会在较新的 Mac OS X 版本上出现问题。

我目前正在运行 bash 4.4.19(1)-release (x86_64-apple-darwin15.6.0) ,该达尔文版本意味着 Mac OS X El Capitan (10.11.6)。

这是我的jenv javahome运行时:

[me:~] $ time jenv javahome
/Users/me/.jenv/versions/1.8

real    0m0.089s
user    0m0.035s
sys 0m0.043s

一位同事有一台较新的笔记本电脑,他正在运行 bash version 4.4.19(1)-release (x86_64-apple-darwin17.3.0 (与我完全相同的 bash 版本,只是在 Mac OS X High Sierra 10.13.4 上)。 这是他的jenv javahome时间:

[him:~] $ time jenv javahome
/Users/him/.jenv/versions/1.8

real    0m1.029s
user    0m0.041s
sys    0m0.077s

每次显示 bash 提示时都有1.029秒的延迟,即使在同一个终端窗口中也是如此(换句话说,延迟不仅仅是在打开新的终端窗口时体验到的-)。

基于此,是否有可以实施的解决方法?

例如 - 甚至需要导出插件吗? (我只是在大声思考 - 我不确定)

我一直在我的自我管理安装中使用的替代方法(在找到 jenv 之前)是拥有一个指向所需 JDK 的“当前”符号链接。 或者在 jenv 的情况下,也许称它为global以保留当前的命名法。

基于此,我认为我们可以基于以下内容取消导出插件:

  • 运行jenv global {version}将确保符号链接~/.jenv/versions/global存在并指向~/.jenv/versions现有的符号链接之一,并且export JAVA_HOME="$HOME/.jenv/versions/global"行将在jenv init -的输出中

  • 运行jenv shell {version}与仅对当前 shell 运行export JAVA_HOME="$HOME/.jenv/versions/{version}" jenv shell {version}具有相同的效果,并且不会修改global符号链接。

  • 不确定jenv local {version}还需要什么。

如果不能完全解决它们,也许这可以大大加快处理速度。 想法?

所有4条评论

我也在 jenv 0.4.4 (但通过brew install jenv由自制软件安装)。

发生这种情况是因为_jenv_export_hook中的$HOME/.jenv/plugins/export/etc/jenv.d/init/export_jenv_hook.bash _jenv_export_hook函数在评估$PROMPT_COMMAND时在每个提示显示上被 bash 调用

通常这是可以的,但是_jenv_export_hook调用jenv javahome来设置 JAVA_HOME 值。 我认为jenv javahome是这里的罪魁祸首,它可能只会在较新的 Mac OS X 版本上出现问题。

我目前正在运行 bash 4.4.19(1)-release (x86_64-apple-darwin15.6.0) ,该达尔文版本意味着 Mac OS X El Capitan (10.11.6)。

这是我的jenv javahome运行时:

[me:~] $ time jenv javahome
/Users/me/.jenv/versions/1.8

real    0m0.089s
user    0m0.035s
sys 0m0.043s

一位同事有一台较新的笔记本电脑,他正在运行 bash version 4.4.19(1)-release (x86_64-apple-darwin17.3.0 (与我完全相同的 bash 版本,只是在 Mac OS X High Sierra 10.13.4 上)。 这是他的jenv javahome时间:

[him:~] $ time jenv javahome
/Users/him/.jenv/versions/1.8

real    0m1.029s
user    0m0.041s
sys    0m0.077s

每次显示 bash 提示时都有1.029秒的延迟,即使在同一个终端窗口中也是如此(换句话说,延迟不仅仅是在打开新的终端窗口时体验到的-)。

基于此,是否有可以实施的解决方法?

例如 - 甚至需要导出插件吗? (我只是在大声思考 - 我不确定)

我一直在我的自我管理安装中使用的替代方法(在找到 jenv 之前)是拥有一个指向所需 JDK 的“当前”符号链接。 或者在 jenv 的情况下,也许称它为global以保留当前的命名法。

基于此,我认为我们可以基于以下内容取消导出插件:

  • 运行jenv global {version}将确保符号链接~/.jenv/versions/global存在并指向~/.jenv/versions现有的符号链接之一,并且export JAVA_HOME="$HOME/.jenv/versions/global"行将在jenv init -的输出中

  • 运行jenv shell {version}与仅对当前 shell 运行export JAVA_HOME="$HOME/.jenv/versions/{version}" jenv shell {version}具有相同的效果,并且不会修改global符号链接。

  • 不确定jenv local {version}还需要什么。

如果不能完全解决它们,也许这可以大大加快处理速度。 想法?

我在 zsh 中启用导出插件后,在 jenv 0.5.3 上发现了同样的缓慢问题。 使用zsh/zprof我发现这是 shell 启动时间的主要缓慢因素

$ zsh -i -c exit | head -5
num  calls                time                       self            name
-----------------------------------------------------------------------------------
 1)    1         133,57   133,57   81,40%    133,57   133,57   81,40%  _jenv_export_hook
 2)    1          12,78    12,78    7,79%     12,78    12,78    7,79%  compinit
 3)    7           8,10     1,16    4,94%      5,92     0,85    3,61%  (anon)

谢谢你。

我会检查我们是否可以改进。

@gcuisinier你有关于这个问题的任何更新吗? 如果我在 zsh 中禁用 jenv 插件,我肯定会感觉到不同。 jenv 版本0.5.4

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

wnck picture wnck  ·  3评论

mojavelinux picture mojavelinux  ·  4评论

rachelwilson picture rachelwilson  ·  6评论

HeIsIdeus picture HeIsIdeus  ·  9评论

c0nscience picture c0nscience  ·  3评论