oh-my-zsh性能调优思路
Z shell搭配oh-my-zsh自定义配置已成为众多Linux/Macosx用户的标准terminal配置。
最近遇到在zsh
中执行任意命令都变得特别慢(哪怕简单执行ls
也要花费肉眼可见的1,2秒钟),这里记录下如何排查Z shell下启用oh-my-zsh的性能问题。
性能问题症状
突然某天起在终端中执行任意命令,都至少要花费1,2秒(肉眼计数),该命令才会完成执行并退出到终端开始接受新的输入。
我当前主要使用的终端是iTerm2,执行命令后,在终端Tab的title bar上能显式的看到git
命令也被执行了。
尝试了其他的shell,比如bash
,是没有这个问题。基本断定问题同zsh
相关。更多问题描述乃至动画截屏,可以参见这个issue。
zsh + oh-my-zsh 性能问题分析
oh-my-zsh其实就是提供zsh的定制化配置,主要包括Theme主题和各种软件的插件。
oh-my-zsh 插件
通常oh-my-zsh中内置或三方社区提供的插件是导致性能降低甚至互相冲突的主要原因。排查思路也很简单,通过逐个禁用已加载的插件来测试是否可以解决问题。
用文本编辑器打开当前用户的~/.zshrc
配置,找到plugins
开头的配置行,例如,
1plugins=(
2 git
3 osx
4## gradle
5 brew
6## command-not-found
7 github
8# gnu-utils
9## mvn
10 python
11 pip
12# screen
13 vi-mode
14 docker
15## docker-compose
16 node
17## spring
18 mosh
19# httpie
20## sudo
21 tmux
22## kubectl
23## helm
24 golang
25 history
26 history-substring-search
27 zsh-autosuggestions
28 zsh-syntax-highlighting
29)
通过行首添加#
来禁用oh-my-zsh
插件,启动新的终端窗口或tab来验证是否该插件是引起问题的根源。
在我的配置中,出现过因为启用过多插件,导致新建终端需要10来秒钟。但因为创建终端不是一个高频的需求,这个性能通常来说还是可以忍受。
oh-my-zsh 主题
在我的这个问题中,即使将所有插件都禁用了,命令执行后退出速度还是没有改善,git
命令仍然有被执行。这时我尝试更换不同oh-my-zsh
内置主题来排查问题。但是使用了包括默认主题robbyrussell
,极简主题ys
在内的多个主题都无法解决该问题。
最后直接禁止oh-my-zsh
使用主题,问题没有了!
然而oh-my-zsh
主题是对zsh的极大增强,改善了默认的用户体验,没有主题扩展使用起来会非常不习惯。
小结
最终试用了另一个社区维护的知名zsh
主题Pure,性能问题得到了解决✌️ 同时也满足了主题对zsh输入输出用户体验的增强 😊
希望这里分享的oh-my-zsh
性能的调优思路,可以帮助到有类似需要的各位。
将来社区对这个问题如有进一步的反馈,将会做更新。