在jenv enable-plugin export
,shell 响应非常缓慢。
$ # <= type enter here
$ # shell is active after about 0.3 seconds (slow!)
( 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}
还需要什么。
如果不能完全解决它们,也许这可以大大加快处理速度。 想法?
我在 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
最有用的评论
我也在 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
运行时:一位同事有一台较新的笔记本电脑,他正在运行 bash
version 4.4.19(1)-release (x86_64-apple-darwin17.3.0
(与我完全相同的 bash 版本,只是在 Mac OS X High Sierra 10.13.4 上)。 这是他的jenv javahome
时间:每次显示 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}
还需要什么。如果不能完全解决它们,也许这可以大大加快处理速度。 想法?