柴柴's TIL

NVM 懒加载将 zsh 启动提速 3 倍

· 2 views ·

NVM 是 zsh 启动最大的性能杀手,完整加载耗时约 450ms,占启动时间的 93%。

用懒加载方案替代直接 source,核心思路:直接把当前 node 版本的 bin 目录加到 PATH(保证 node/npm/npx 立即可用),然后把 nvm 命令包装成一个 shell 函数,首次调用时才真正加载。

替换前:

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"

替换后:

export NVM_DIR="$HOME/.nvm"
export PATH="$NVM_DIR/versions/node/v22.16.0/bin:$PATH"
nvm() {
  unset -f nvm node npm npx
  [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
  nvm "$@"
}

效果:zsh 启动从 ~0.9s 降到 ~0.3s。日常使用 node/npm 无感,只有执行 nvm use 等切换版本操作时才触发完整加载。