采用懒加载显著优化 oh my zsh 启动速度

编辑


也不知道从什么时候开始,感觉 Zsh 终端加载出来的速度,肉眼可见的变慢了,就算执行一个 ls 命令也出来很慢。

性能测试

先使用 /usr/bin/time /bin/zsh -i -c exit 命令进行测试,可以看到占用非常高。

❯ /usr/bin/time /bin/zsh -i -c exit
12.88user 4.26system 0:15.19elapsed 112%CPU (0avgtext+0avgdata 17152maxresident)k
0inputs+48outputs (0major+60964minor)pagefaults 0swaps
❯ /usr/bin/time /bin/zsh -i -c exit
11.16user 3.57system 0:12.95elapsed 113%CPU (0avgtext+0avgdata 17024maxresident)k
0inputs+48outputs (0major+61078minor)pagefaults 0swaps

2025-02-20T10:05:45.png
如果需要精准的查看是什么位置影响,可以使用命令:zsh -xv 查看详情。

优化 nvm 和 pyenv

由于我的开发设计 Node 和 Python 项目开发,因此涉及到不同的环境切换。

使用 zsh-nvm 插件,实现 nvm 的懒加载。

git clone https://github.com/lukechilds/zsh-nvm ~/.oh-my-zsh/custom/plugins/zsh-nvm

使用 zsh-pyenv-lazy 插件,实现 pyenv 的懒加载。

git clone https://github.com/davidparsson/zsh-pyenv-lazy.git ~/.oh-my-zsh/custom/plugins/pyenv-lazy

然后在 .zshrc 文件中开启插件:

plugins=(
  ...
  zsh-nvm
  pyenv-lazy
)

删除 .zshrc 原有的 pyenv 启动部分。
删除 .zshrc 原有的 nvm 启动部分并开启 zsh-nvm 的 lazyload,加入:

# zsh-nvm lazy load
export NVM_LAZY_LOAD=true

替换 zsh-autosuggestions 和 zsh-syntax-highlighting

使用 fast-syntax-highlighting 为 Zsh 提供丰富的语法高亮显示。

git clone https://github.com/zdharma-continuum/fast-syntax-highlighting.git \
  ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/fast-syntax-highlighting

使用 zsh-autocomplete 为 Zsh 提供实时提前输入自动完成。

git clone https://github.com/marlonrichert/zsh-autocomplete.git ${ZSH_CUSTOM:=~/.oh-my-zsh/custom}/plugins/zsh-autocomplete

然后在 .zshrc 文件中开启插件:

plugins=(
  ...
  fast-syntax-highlighting
  zsh-autocomplete
)

效果测试

调整后刷新配置文件 source ~/.zshrc,重新测试性能,可以看到效果显著。

❯ /usr/bin/time /bin/zsh -i -c exit
4.53user 0.74system 0:04.90elapsed 107%CPU (0avgtext+0avgdata 7732maxresident)k
0inputs+0outputs (0major+10199minor)pagefaults 0swaps

评论区

暂无评论,快来抢沙发