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

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

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

http://www.xdnf.cn/news/9573.html

相关文章:

  • Vue之使用Vue-cli创建Webpack工程化项目
  • DDS通信中间件——DDS-TSN规范
  • 大模型-高通平台性能测试示例-2
  • Error Swap_arc198c分析与解答
  • docker容器间服务访问的问题
  • 最终章:终焉之塔 · 前端之道
  • WinServer2016安装Docker
  • ResizeObserver 解决 echarts渲染不出来,内容宽度为 0的问题
  • 无法发布到PowerBI?试试拆分它
  • 回头看,FPGA+RK3576方案的功耗性能优势
  • 设计模式-单例模式
  • 理解 C++ 多态:概念、实现方式与实战示例
  • 密钥管理系统在存储加密场景中的深度实践:以TDE透明加密守护文件服务器安全
  • VC++和python从哪一年开始支持split(字符串)非单个字符
  • 【深度学习-pytorch篇】1. Pytorch矩阵操作与DataSet创建
  • LiveGBS国标视频平台收流模式:UDP、TCP被动与TCP主动传输模式之差异剖析
  • 【系统架构设计师】2025年上半年真题论文回忆版: 论多模型数据库及应用(包括解题思路和参考素材)
  • python--=的用法
  • 小白的进阶之路系列之四----人工智能从初步到精通pytorch自定义数据集下
  • 【每天一个知识点】LangChain
  • 针对Python开发的工具推荐及分析,涵盖集成开发环境(IDE)、轻量级工具、在线开发平台、代码管理工具等)
  • 智能手表怎么申请欧盟EN 18031认证
  • 主流 AI IDE 之一的 Windsurf 介绍
  • MySQL 数据迁移Postgresql(openGuass) 之 pg_chameleon
  • BGP实验报告
  • SQLiteStudio - 免费开源、轻量高效,跨平台的 SQLite 数据库管理工具,代替 Navicat for SQLite
  • 【已解决】windows gitbash 出现CondaError: Run ‘conda init‘ before ‘conda activate‘
  • 深入探讨集合与数组转换方法
  • 如何实现电竞比赛的实时直播?
  • 如何收集Oracle DB SQL Monitor报告