跳至内容
返回

zsh 冷启动速度优化(Oh My Zsh)

发布于:  at  16:00

某次打开 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 看下哪个耗时时间最长

# ~/.zshrc
# 加到第一行
zmodload zsh/zprof

执行 zprof 发现最慢的是 nvm

🚀Speed

替换(Replacement)

nvm 使用 fnm,这里加上 --use-on-cd 参数后,会运行项目指定的 Node.js 版本(.node-version / .nvmrc

// ~/.zshrc
plugins=(nvm)

# export NVM
export PATH=$HOME/.fnm:$PATH
eval "$(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,还有优化空间,留个坑后续继续优化…


在以下平台分享此文章:

上一篇
📝 新 Macbook Pro 装机记录
下一篇
Monorepo 下的模块包设计实践