17 pontos por GN⁺ 2026-01-11 | 10 comentários | Compartilhar no WhatsApp
  • 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

  • A configuração mínima de Zsh proposta é a seguinte
    export HISTSIZE=1000000000
    export SAVEHIST=$HISTSIZE
    setopt EXTENDED_HISTORY
    setopt autocd
    autoload -U compinit; compinit
    
    • HISTSIZE e SAVEHIST definem o tamanho do histórico de comandos
    • EXTENDED_HISTORY adiciona timestamps ao histórico
    • autocd permite mudar de diretório sem usar o comando cd
    • compinit inicializa o sistema de autocompletar
  • Só essa configuração já fornece um ambiente básico de shell com conclusão automática

Personalização do prompt

  • O prompt usa o Starship
    • O Starship é um prompt rápido e minimalista composto por um único binário
    • Ele substitui plugins e temas do OMZ, exibindo estado de git, ambiente virtual e linguagens específicas
  • No exemplo de configuração do Starship, indicadores relacionados à nuvem, como AWS, GCP, Azure e NodeJS, são desativados para reduzir a poluição visual
  • Em projetos Python e Rust, cada linguagem é destacada no prompt, e o tempo de execução dos comandos também é exibido
  • Para ativá-lo, adicione esta linha ao .zshrc
    eval "$(starship init zsh)"
    

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

  • Após aplicar a configuração acima, o tempo de inicialização do shell ficou assim
    ❯ /usr/bin/time -f "%e seconds" zsh -i -c exit
    0.07 seconds
    
  • Isso garante uma velocidade de inicialização mais de 5 vezes maior em comparação com o OMZ

Dica adicional

  • Usuários de Vim podem ativar o modo Vim no Zsh para melhorar a edição de comandos
    set -o vi
    bindkey -v '^?' backward-delete-char
    
    • Como o zle usa bindings no estilo Emacs por padrão, essa configuração habilita entrada no estilo Vim

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

 
roxie 2026-02-27

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,,

 
tesha001 2026-01-12

Ainda não era algo desconfortável a ponto de chamar tanto a atenção.

 
princox 2026-01-12

Não é um servidor web, e se não chega a ser desconfortável a ponto de incomodar, eu simplesmente deixo passar..

 
zxcv123 2026-01-11

Coisa de desenvolvedor mesmo: fazem um escândalo por causa de alguns ms inúteis kkk

 
kayws426 2026-01-12

Não é justamente por causa de alguns ms desnecessários que a tecnologia vem evoluindo?

 
t7vonn 2026-01-11

Se você usa o terminal com frequência, a latência adicional introduzida pelo omz é bastante incômoda.

 
edunga1 2026-01-12

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.

 
devfluotin 2026-01-12

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...

 
wedding 2026-01-14

Eu migrei para o starship.

 
GN⁺ 2026-01-11
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

    • Eu recomendaria experimentar o Starship
      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 é simples
      acho que você não vai se arrepender de testar
    • Se for uma máquina que permite configuração personalizada, acho melhor copiar seus próprios dotfiles
      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
    • Na verdade, não foi para isso que os dotfiles foram criados?
      É brincadeira, mas copiar um .bashrc é bem mais simples do que instalar um shell completo
    • Eu também usei Oh My Zsh, mas desisti porque era lento demais
      era 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
    • Zim também é bom. É mais rápido que Oh My Zsh e mais simples de configurar
      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

    • A vantagem dessa abordagem é que, em qualquer host, basta instalar o fish para ter o mesmo ambiente sem configuração extra
    • O fish tem ótimo desempenho e excelente UX mesmo no estado padrão
      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+arrow
    • Fico curioso sobre o que falta na configuração padrão
      eu à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-e
    quando faço pair programming com alguém, a troca de modo do Vim até parece deixar tudo mais lento

    • Acabei de descobrir como o atalho C-x C-e é realmente útil
    • Eu também reativei os bindings do readline depois de ligar o modo Vim
      na maior parte do tempo fico no modo insert, e só uso C-x C-e quando preciso fazer uma edição maior
    • Trocar de modo é só uma tecla, então não há motivo para ser mais lento
      se você já está acostumado com os bindings do vi, comandos como w, b e dw ficam mais rápidos por memória muscular
      abrir 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 ms
    acho que um atraso de 380 ms pode ter outra causa

    • Se você se interessa por desempenho de zsh, recomendo o zsh4humans
      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 o zshrc
      é melhor testar com zsh -ic exit
      para mais detalhes, veja o guia do zsh-bench
    • Uma medição mais precisa é adicionar zprof ao .zshrc
      zmodload zsh/zprof
      ...
      zprof
      
    • Também recomendo fazer benchmark dentro de um repositório git
    • Vale a pena experimentar plugins como extract, z e fzf
  • Eu 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

    • Mas o fish tem a desvantagem de não ser compatível com POSIX, o que incomoda
      por isso eu mantenho zsh + starship + um script simples de init
      queria que o fish simplesmente “funcionasse” perfeitamente, mas ainda falta um pouco
    • Eu também usei zsh por décadas, mas troquei para fish no ano passado e continuo usando
      é 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
    • Na prática, o fish é bom o suficiente no estado padrão, então quase não precisa de customização
  • Eu mudei para o Zim há alguns anos
    ele tem tudo de que preciso, é rápido e fácil de instalar
    https://zimfw.sh/

    • O Zimfw tem um sistema de instalação muito rápido e flexível
      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 starship no prompt, quase não precisei de configuração extra
    até 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

    • Mas, se você trabalha centrado no terminal, acaba abrindo dezenas de shells por dia
      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
    • Em contrapartida, há quem pergunte quantas vezes por dia alguém realmente abre um shell
      no máximo umas 20 vezes, então isso não seria um grande problema
    • Outra pessoa acha que faz mais sentido ver isso apenas como preferência pessoal
      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