当前位置: 首页 > news >正文

Zsh/Bash Conda设置延迟启动,启动速度优化

Zsh/Bash 启动速度优化

在安装完 Conda 之后,会发现每次启动 Zsh/Bash 的时候都需要加载时间,这个时候就会发现没有以前流畅了,原因是因为每次启动 Shell 时都需要去加载 Conda 环境,才能保证每次可以使用工具。然而官方自带的安装脚本在安装后都是强制每次启动 shell 时直接加载环境,会导致每次启动被拖慢,需要很多等待时间。本文提供延迟启动的方法,以提升每次的启动速度。

测试速度

首先需要分析是什么拖慢了启动时间,除了 Conda 作为主要拖慢启动的进程,可能还有其他。这里以 Zsh 为例,在启动脚本 ~/.zshrc 开头中添加:

zmodload zsh/zprof

末尾添加:

zprof

最终可以看到输出,这里可以看到 nvm 和 conda 在 zsh 启动时占用了绝大部分时间。

num  calls                time                       self            name
-----------------------------------------------------------------------------------1)    2         291.99   146.00   48.89%    155.93    77.97   26.11%  nvm2)    1         114.14   114.14   19.11%    114.14   114.14   19.11%  compdump3)    1         118.46   118.46   19.83%    102.74   102.74   17.20%  nvm_ensure_version_installed4)    1         348.41   348.41   58.34%     56.42    56.42    9.45%  nvm_auto5)    1         199.97   199.97   33.48%     40.39    40.39    6.76%  compinit6)  815          37.68     0.05    6.31%     37.68     0.05    6.31%  compdef7)    1          15.71    15.71    2.63%     15.71    15.71    2.63%  nvm_is_version_installed8)    1          13.56    13.56    2.27%     13.56    13.56    2.27%  zrecompile9)    1          17.52    17.52    2.93%     12.53    12.53    2.10%  nvm_die_on_prefix
10)   22          14.00     0.64    2.34%     11.00     0.50    1.84%  _omz_source
11)    2           9.26     4.63    1.55%      9.26     4.63    1.55%  __sdkman_export_candidate_home
12)    2           8.36     4.18    1.40%      8.36     4.18    1.40%  compaudit
13)    2           5.98     2.99    1.00%      5.98     2.99    1.00%  __sdkman_prepend_candidate_to_path
14)    2           4.76     2.38    0.80%      4.76     2.38    0.80%  nvm_grep
15)    1           4.15     4.15    0.70%      4.15     4.15    0.70%  (anon)
16)    1           1.77     1.77    0.30%      1.77     1.77    0.30%  test-ls-args
17)    1           5.68     5.68    0.95%      1.53     1.53    0.26%  handle_update
18)    1           0.30     0.30    0.05%      0.30     0.30    0.05%  colors
19)    6           0.28     0.05    0.05%      0.28     0.05    0.05%  is-at-least
20)    4           4.99     1.25    0.84%      0.23     0.06    0.04%  nvm_npmrc_bad_news_bears
21)    4           0.14     0.04    0.02%      0.14     0.04    0.02%  add-zsh-hook
22)    3           0.12     0.04    0.02%      0.12     0.04    0.02%  bashcompinit
23)    2           0.18     0.09    0.03%      0.09     0.04    0.01%  complete
24)    1           0.08     0.08    0.01%      0.08     0.08    0.01%  nvm_has
25)    1         348.44   348.44   58.34%      0.03     0.03    0.01%  nvm_process_parameters
26)    3           0.03     0.01    0.00%      0.03     0.01    0.00%  is_theme
27)    2           0.02     0.01    0.00%      0.02     0.01    0.00%  is_plugin
28)    2           0.01     0.01    0.00%      0.01     0.01    0.00%  __sdkman_echo_debug
29)    1           0.01     0.01    0.00%      0.01     0.01    0.00%  nvm_is_zsh
30)    2           0.01     0.00    0.00%      0.01     0.00    0.00%  env_default-----------------------------------------------------------------------------------

优化

将 Anaconda 和 NVM 设置成延迟启动,也就是只有在使用时加载环境,这样避免每次启动 zsh 就自动加载环境占用时间。

Anaconda 加载

# >>> conda initialize >>>
lazy_load_conda() {unalias conda 2>/dev/null# 初始化 conda__conda_setup="$('/home/cacc/anaconda3/bin/conda' 'shell.bash' 'hook' 2>/dev/null)"if [ $? -eq 0 ]; theneval "$__conda_setup"elseif [ -f "/home/cacc/anaconda3/etc/profile.d/conda.sh" ]; then. "/home/cacc/anaconda3/etc/profile.d/conda.sh"elseexport PATH="/home/cacc/anaconda3/bin:$PATH"fifiunset __conda_setup# 执行原命令conda "$@"
}
alias conda='lazy_load_conda'
# <<< conda initialize <<<

Node Version Manager(NVM)加载

# 延迟加载 NVM
export NVM_DIR="$HOME/.nvm"
lazy_load_nvm() {unalias nvm node npm yarn 2>/dev/null# 加载 nvm[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"# 执行原命令"$@"
}
alias nvm='lazy_load_nvm nvm'
alias node='lazy_load_nvm node'
alias npm='lazy_load_nvm npm'
alias yarn='lazy_load_nvm yarn'

最后重新加载启动脚本:

source .zshrc

后面每次启动就只加载必要环境,启动时间大幅减小。

相关文章:

  • zookeeper 操作总结
  • 打破网络次元壁:NAT 穿透与内网打洞的 “Matrix 式” 通信革命
  • 关于uv 工具的使用总结(uv,conda,pip什么关系)
  • 力扣 秋招 打卡第一天 2025年5月28日 Java
  • 力扣热题100(附刷题表版)
  • 5.2.2二叉树的存储结构
  • TextIn OCR Frontend前端开源组件库发布!
  • LeetCode 136:只出现一次的数字 - 巧用异或运算的极致解法
  • TypeScript 中的剩余参数:灵活处理可变数量参数
  • Weather app using Django - Python
  • 多因素身份鉴别组合方案及应用场景
  • SpringBoot 执行Lua脚本 服务端执行 减少性能损耗 优化性能 优化连接性能
  • 工业5.0视域下的医疗AI行业未来发展方向研究
  • SpringBoot 验证码练习
  • C++学习之STL学习:vector类的使用
  • Milvus向量Search查询综合案例实战(下)
  • 即插即用的全新算法改进策略——引导学习策略:一种用于元启发式算法设计和改进的新型更新机制
  • C语言| 函数参数传递指针
  • 如何使用 poetry 创建虚拟环境,VSCode 如何激活使用 Poetry 虚拟环境(VSCode如何配置 Poetry 虚拟环境)
  • 2025年渗透测试面试题总结-匿名[校招]安全服务工程师(题目+回答)
  • 咸阳哪里做网站/ui培训
  • 做网站用什么软件最简单/百度关键词相关性优化软件
  • 汽车网站模板下载/广告制作公司
  • 佛山网站建设公司排名/seo销售好做吗
  • 网站建设 资质/优化师是做什么的
  • 网页设计师技术水平证书/东莞网站推广优化网站