- Oh My Zsh(OMZ) ainda é amplamente recomendado, mas causa sobrecarga desnecessária de scripts que deixa o início do shell mais lento
- O OMZ é escrito em shell script, então precisa interpretar todos os scripts sempre que uma nova aba do terminal é aberta, causando cerca de 0,38 segundo de atraso mesmo na configuração padrão
- Com uma configuração mínima de Zsh, prompt Starship e busca no histórico baseada em fzf, é possível reduzir o tempo de inicialização para 0,07 segundo
- O Starship monta o prompt como um único binário, substituindo os plugins de git, ambiente virtual e linguagens específicas do OMZ
- Uma configuração de shell enxuta, em que apenas os recursos necessários são adicionados manualmente, é mais eficiente do que plugins complexos
Problemas de desempenho do Oh My Zsh
- Oh My Zsh(OMZ) ainda é muito usado, mas reduz a velocidade de inicialização do shell por causa de sobrecarga desnecessária (bloat)
- O OMZ é composto por shell scripts, então todos eles precisam ser interpretados sempre que uma nova aba do terminal é aberta
- Em uma configuração com plugins padrão (
git, zsh-autosuggestions, zsh-autocomplete), ao executar /usr/bin/time -f "%e seconds" zsh -i -c exit, o resultado foi de 0,38 segundo
- Ao abrir uma nova aba dentro de uma pasta de repositório git, a sensação é de cerca de 1 segundo de atraso
- O OMZ verifica atualizações periodicamente, e esse processo pode causar alguns segundos extras de atraso
- Atualizações frequentes da configuração do shell são desnecessárias, e recomenda-se uma configuração simples com apenas os recursos necessários adicionados manualmente
Configuração mínima de Zsh
Personalização do prompt
Busca no histórico
- O plugin
zsh-autosuggestions, bastante usado, mostra sugestões enquanto você digita e pode distrair
- Em vez disso, usa-se o fzf vinculado a
Ctrl+R para navegar pelo histórico com busca fuzzy interativa
source <(fzf --zsh)
Resultado da melhora de desempenho
Dica adicional
Conclusão e casos de uso
- Após migrar do OMZ, foi possível se adaptar ao novo fluxo de trabalho em poucos dias
- Os plugins necessários podem ser carregados manualmente
- O motivo para abrir muitas abas é o uso conjunto de tmux e do editor baseado em terminal helix
- No tmux,
lazygit e o gerenciador de arquivos yazi são executados em pop-ups
- São usadas divisões temporárias para executar código e ver saídas de teste, cada uma funcionando como uma sessão separada de shell
Resumo dos comentários
- Alguns usuários afirmam que o tempo de inicialização do OMZ, em torno de 0,03 segundo, já é rápido o suficiente
- O autor aponta que o plugin zsh-autocomplete é o responsável por reduzir o desempenho
- Nos resultados do
zsh-bench, o atraso até o primeiro prompt do OMZ foi de 603 ms, enquanto uma configuração simples de Zsh marcou 103 ms
- O Starship substitui as funções relacionadas ao prompt do OMZ com uma única ferramenta
- Outros usuários mencionaram alternativas como Zimfw, Atuin e prompts bash feitos manualmente
10 comentários
Se você não fizer otimizações, realmente fica bem lento. Mas tem muitos recursos com os quais eu já me acostumei, então é meio difícil largar,,
Ainda não era algo desconfortável a ponto de chamar tanto a atenção.
Não é um servidor web, e se não chega a ser desconfortável a ponto de incomodar, eu simplesmente deixo passar..
Coisa de desenvolvedor mesmo: fazem um escândalo por causa de alguns ms inúteis kkk
Não é justamente por causa de alguns ms desnecessários que a tecnologia vem evoluindo?
Se você usa o terminal com frequência, a latência adicional introduzida pelo omz é bastante incômoda.
Comecei usando o omz e achei que esse incômodo era algo com que eu só tinha que conviver buá buá
Recentemente fui removendo os plugins um por um e também mudei a política de atualização... vendo isso, acho que dá tranquilamente para ficar sem ele.
No meu caso, quando carrego as configurações com o tmuxinator e aparece o
omz update y/n, acho bem ruim.Mudei para o prezto há alguns meses, e realmente fiquei pensando se o omz sempre foi tão lento assim.
Só com alguns plugins básicos já dava para sentir que ficava bem mais lento...
Eu migrei para o starship.
Comentários do Hacker News
Eu só tenho um motivo para usar oh-my-zsh
ter um ambiente de shell produtivo de imediato que funcione na hora em qualquer máquina nova, host remoto ou contêiner
em vez de gastar horas mexendo na configuração, prefiro usar esse tempo em coisas mais importantes
ele mantém a experiência de “instalar e sair usando”, mas sem mais de 200 ms de atraso no prompt
dá para instalar com uma única linha de
curl, e a configuração também é simplesacho que você não vai se arrepender de testar
depois de montar os arquivos de configuração uma vez e gerenciar tudo com git, dá para usar igual em outras máquinas
quando eu configuro uma máquina nova, basta trazer meus dotfiles e meu ambiente familiar já está pronto
É brincadeira, mas copiar um
.bashrcé bem mais simples do que instalar um shell completoera irritante ter que esperar toda vez que eu abria uma aba
no fim, instalei manualmente só alguns plugins de que precisava com Homebrew, e não levou nem uma hora
agora tenho um shell rápido e leve e estou bem mais produtivo e satisfeito
o shell inicia muito rápido e a configuração é fácil
Por isso eu migrei para o fish
não é perfeito para o meu gosto, mas a configuração padrão já é boa o suficiente, então acabei me acostumando
agora quase não preciso mais pensar em configuração de shell
mas eu recomendaria que iniciantes dessem uma olhada nos atalhos de teclado
já aconteceu de um colega de equipe ficar mais lento por não conhecer recursos como completar com tab ou
shift+arroweu às vezes só adiciono bindings de vim ou algum plugin de fuzzy find
o fish puro já é excelente por si só
Eu não concordo com a opinião de recomendar ativar o modo Vim no Zsh
o readline padrão já é bom o bastante para comandos únicos
para comandos longos, basta editar com
C-x C-equando faço pair programming com alguém, a troca de modo do Vim até parece deixar tudo mais lento
C-x C-eé realmente útilna maior parte do tempo fico no modo insert, e só uso
C-x C-equando preciso fazer uma edição maiorse você já está acostumado com os bindings do vi, comandos como
w,bedwficam mais rápidos por memória muscularabrir o editor quebra o fluxo e ainda esconde a saída, então eu não gosto
queria que o shell também tivesse recursos do Vim como apagar entre caracteres (
di")Eu também só uso oh-my-zsh como configuração base
uso apenas o plugin de git e faço autoload das funções personalizadas
medindo com
hyperfine, meu shell de login ficou em 54 ms e o shell normal em cerca de 6 msacho que um atraso de 380 ms pode ter outra causa
ele permite inicialização instantânea e, por estar em modo de manutenção, até ajuda a evitar perda de tempo
zsh -lé um shell de login, então não carrega ozshrcé melhor testar com
zsh -ic exitpara mais detalhes, veja o guia do zsh-bench
zprofao.zshrcextract,zefzfEu migrei para a combinação fish + starship
o fish já oferece autocompletar e destaque de sintaxe por padrão, então substitui os principais recursos do oh-my-zsh
veja este texto
por isso eu mantenho zsh + starship + um script simples de init
queria que o fish simplesmente “funcionasse” perfeitamente, mas ainda falta um pouco
é chato não ter HEREDOC e não poder fazer blocos em background,
mas hoje em dia prefiro linguagens compiladas em um binário único para scripts mais complexos
quando ele amadurecer, pretendo migrar para o nushell
Eu mudei para o Zim há alguns anos
ele tem tudo de que preciso, é rápido e fácil de instalar
https://zimfw.sh/
suporta várias fontes e formatos, e também integra muito bem código zsh
ele é muito melhor que a maioria dos sistemas de plugins em velocidade e compatibilidade
é realmente um framework excelente
Na faculdade, uns 15 anos atrás, instalei o oh-my-zsh,
e desde então fiquei tão satisfeito que nunca senti necessidade de testar outro shell ou outra configuração
é a primeira coisa que instalo sempre que configuro um computador novo
Usei oh-my-zsh por muito tempo, mas desta vez removi tudo em 5 minutos com ajuda do Claude
substituí só os recursos de que precisava por zsh puro
como uso
starshipno prompt, quase não precisei de configuração extraaté agora, tudo parece estar funcionando bem
Algumas pessoas acham exagero tratar o atraso de 0,5 segundo do oh-my-zsh como um problema
dizem que usar bash com KDE Konsole já é suficiente
o shell seria só um wrapper simples para trabalho, então não haveria motivo para se preocupar com esse tipo de micro-otimização
como cada shell faz parte do fluxo de trabalho, até 1 segundo de atraso é perceptível
por isso acho importante ter um shell rápido
no máximo umas 20 vezes, então isso não seria um grande problema
desempenho melhor é bom, claro, mas não considera isso um problema essencial
Minha configuração de zsh tem cerca de 90 linhas e só usa 3 plugins (
compinit,vcs-info,edit-command-line)do início ao fim, leva cerca de 0,32 segundo
em repositórios grandes, há atraso para buscar informações da branch
o utilitário de cache bkt (https://github.com/dimo414/bkt) pode resolver esse tipo de problema
provavelmente o Starship também usa cache de forma parecida