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

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.lryc.cn/news/2395378.html

相关文章:

  • 【AI论文】推理语言模型的强化学习熵机制
  • Java中的JSONObject详解:从基础到高级应用
  • Ubuntu22.04 安装 IsaacSim 4.2.0
  • 子串题解——和为 K 的子数组【LeetCode】
  • 深入理解设计模式之访问者模式
  • Java代码重构:如何提升项目的可维护性和扩展性?
  • 《Python语言程序设计》2018 第4章第9题3重量和价钱的对比,利用第7章的概念来解答你
  • Nginx安装操作命令
  • 在IIS上无法使用PUT等请求
  • Codeforces Round 1028 (Div. 2) B. Gellyfish and Baby‘s Breath
  • 数据基座觉醒!大数据+AI如何重构企业智能决策金字塔(上)
  • 前端八股HTTP和https大全套
  • 使用 DeepSeek API 搭建智能体《无间》- 卓伊凡的完整指南 -优雅草卓伊凡
  • 量子语言模型——where to go
  • flutter使用html_editor_enhanced: ^2.6.0后,编辑框无法获取焦点,无法操作
  • FPGA纯verilog实现MIPI-DSI视频编码输出,提供工程源码和技术支持
  • 手写字魔法消除3:深度学习PmrNet神经网络实现图片修复(含训练代码、数据集和GUI交互界面)
  • 大数据运维过程中常见的一些操作
  • opencv使用经典bug
  • 劫持进程注入
  • 计算机基础——宏病毒防御与网络技术
  • 深度解析互联网区(Internet ):架构、风险与防护全攻略
  • 2024Flutter面试题
  • C++内存学习
  • Python uv包管理工具使用详解
  • [Linux] Linux 系统从启动到驱动加载
  • 基于微信小程序的云校园信息服务平台设计与实现(源码+定制+开发)云端校园服务系统开发 面向师生的校园事务小程序设计与实现 融合微信生态的智慧校园管理系统开发
  • 大语言模型的技术原理与应用前景:从Transformer到ChatGPT
  • 如何编写GitLab-CI配置文件
  • 生成式人工智能:重构软件开发的范式革命与未来生态