某次打开 Terminal 终端,随手打出命令无法上屏,等待近 10 秒方可与终端交互,是时候优化一波 shell 的冷启动了!
📍测速
使用如下命令
❯ for i in $(seq 1 10); do /usr/bin/time $SHELL -i -c exit; done 11.95 real 1.65 user 2.83 sys 11.92 real 1.78 user 2.93 sys 10.72 real 1.59 user 2.48 sys 14.81 real 1.73 user 2.83 sys 9.60 real 1.62 user 2.56 sys 9.47 real 1.60 user 2.60 sys 14.17 real 1.77 user 3.00 sys 10.08 real 1.72 user 2.96 sys 14.51 real 1.72 user 2.85 sys 11.64 real 1.83 user 2.91 sys用 zsh/zprof 看下哪个耗时时间最长
# 加到第一行zmodload zsh/zprof执行 zprof 发现最慢的是 nvm

🚀Speed
替换(Replacement)
nvm 使用 fnm,这里加上 --use-on-cd 参数后,会运行项目指定的 Node.js 版本(.node-version / .nvmrc)
plugins=(nvm)
# export NVMexport PATH=$HOME/.fnm:$PATHeval "$(fnm env --use-on-cd)"测试下优化很明显
❯ for i in $(seq 1 10); do /usr/bin/time $SHELL -i -c exit; done 1.86 real 0.44 user 0.55 sys 2.15 real 0.46 user 0.59 sys 1.95 real 0.43 user 0.52 sys 2.49 real 0.43 user 0.56 sys 4.56 real 0.45 user 0.62 sys 3.45 real 0.48 user 0.68 sys 1.98 real 0.43 user 0.58 sys 1.97 real 0.45 user 0.58 sys 1.84 real 0.43 user 0.54 sys 1.99 real 0.44 user 0.59 sys缓存(Caching )
使用 evalcache 来缓存 eval 执行
plugins=(... evalcache)# 一定要放在 oh-my-zsh.sh 之前export PATH="$HOME/.jenv/bin:$PATH"export PATH="$HOME/lolimay/.fnm:$PATH"
source $ZSH/oh-my-zsh.sh
# eval "$(jenv init -)"_evalcache jenv init -
# eval "$(fnm env --use-on-cd)"_evalcachefnm env --use-on-cd测试下
❯ for i in $(seq 1 10); do /usr/bin/time $SHELL -i -c exit; done ─╯ 1.45 real 0.37 user 0.41 sys 1.43 real 0.37 user 0.41 sys 1.61 real 0.39 user 0.48 sys 1.76 real 0.41 user 0.51 sys 1.64 real 0.40 user 0.49 sys 1.57 real 0.38 user 0.47 sys 2.12 real 0.39 user 0.45 sys 1.47 real 0.38 user 0.44 sys 2.19 real 0.40 user 0.51 sys 2.18 real 0.42 user 0.52 sys优化效果基本从 11s → 1.45s,还有优化空间,留个坑后续继续优化…