17 points par GN⁺ 2026-01-11 | 10 commentaires | Partager sur WhatsApp
  • Oh My Zsh (OMZ) reste largement recommandé, mais entraîne une surcharge de scripts inutile qui ralentit le démarrage du shell
  • OMZ étant écrit en scripts shell, tous les scripts doivent être interprétés à chaque ouverture d’un nouvel onglet de terminal, ce qui provoque environ 0,38 seconde de latence même avec la configuration par défaut
  • Avec une configuration minimale de Zsh, le prompt Starship et une recherche dans l’historique basée sur fzf, il est possible de ramener le temps de démarrage à 0,07 seconde
  • Starship construit le prompt à partir d’un binaire unique, remplaçant ainsi les plugins git, environnement virtuel et spécifiques aux langages habituellement fournis par OMZ
  • Plutôt que des plugins complexes, une configuration de shell allégée où l’on ajoute soi-même uniquement les fonctions nécessaires est plus efficace

Problèmes de performances d’Oh My Zsh

  • Oh My Zsh (OMZ) reste très utilisé, mais sa surcharge inutile (bloat) dégrade la vitesse de démarrage du shell
    • OMZ est composé de scripts shell, qui doivent tous être interprétés à chaque ouverture d’un nouvel onglet de terminal
    • Avec une configuration incluant les plugins de base (git, zsh-autosuggestions, zsh-autocomplete), l’exécution de /usr/bin/time -f "%e seconds" zsh -i -c exit prend 0,38 seconde
  • Ouvrir un nouvel onglet dans un dossier de dépôt git entraîne une latence ressentie d’environ 1 seconde
  • OMZ vérifie périodiquement les mises à jour, ce qui peut ajouter plusieurs secondes de latence
  • Mettre à jour fréquemment sa configuration shell est inutile ; il est recommandé d’opter pour une configuration simple où l’on ajoute directement uniquement ce dont on a besoin

Configuration minimale de Zsh

  • La configuration minimale de Zsh proposée est la suivante
    export HISTSIZE=1000000000
    export SAVEHIST=$HISTSIZE
    setopt EXTENDED_HISTORY
    setopt autocd
    autoload -U compinit; compinit
    
    • HISTSIZE et SAVEHIST définissent la taille de l’historique des commandes
    • EXTENDED_HISTORY ajoute un horodatage à l’historique
    • autocd permet de changer de répertoire sans utiliser la commande cd
    • compinit initialise le système d’autocomplétion
  • Cette configuration suffit déjà à fournir un environnement shell de base avec complétion

Personnalisation du prompt

  • Le prompt utilise Starship
    • Starship est un prompt rapide et minimaliste constitué d’un seul binaire
    • Il remplace les plugins et thèmes d’OMZ existants, tout en affichant l’état de git, des environnements virtuels et des langages
  • Dans l’exemple de configuration Starship, les indications liées au cloud comme AWS, GCP, Azure, NodeJS, etc. sont désactivées afin de réduire le bruit visuel
  • Dans les projets Python et Rust, le langage concerné est mis en avant dans le prompt, et le temps d’exécution des commandes est également affiché
  • Il suffit d’ajouter cette ligne dans .zshrc pour l’activer
    eval "$(starship init zsh)"
    

Recherche dans l’historique

  • Le plugin zsh-autosuggestions, souvent utilisé, peut distraire l’attention en affichant des suggestions pendant la saisie
  • À la place, il est proposé d’associer fzf à Ctrl+R pour parcourir l’historique avec une recherche fuzzy interactive
    source <(fzf --zsh)
    

Résultats en matière de performances

  • Après application de cette configuration, le temps de démarrage du shell devient
    ❯ /usr/bin/time -f "%e seconds" zsh -i -c exit
    0.07 seconds
    
  • Soit un démarrage plus de 5 fois plus rapide que sous OMZ

Astuce supplémentaire

  • Les utilisateurs de Vim peuvent activer le mode Vim dans Zsh pour accélérer l’édition des commandes
    set -o vi
    bindkey -v '^?' backward-delete-char
    
    • zle utilise par défaut les raccourcis clavier d’Emacs ; ce réglage permet donc une saisie de type Vim

Conclusion et cas d’usage

  • Après avoir quitté OMZ, l’auteur s’est adapté au nouveau workflow en quelques jours
  • Les plugins nécessaires peuvent être chargés manuellement
  • S’il ouvre de nombreux onglets, c’est parce qu’il utilise tmux et un éditeur en terminal (helix) ensemble
    • Dans tmux, il lance lazygit et le gestionnaire de fichiers yazi sous forme de popups
    • Il utilise aussi des volets temporaires pour exécuter du code et afficher les sorties de test, chacun fonctionnant comme une session shell distincte

Résumé des commentaires

  • Certains utilisateurs affirment que le temps de démarrage d’OMZ, autour de 0,03 seconde, est déjà largement suffisant
  • L’auteur souligne que le plugin zsh-autocomplete dégrade les performances
  • Dans les résultats de zsh-bench, le délai jusqu’au premier prompt est mesuré à 603 ms pour OMZ, contre 103 ms pour une simple configuration Zsh
  • Starship remplace les fonctionnalités de prompt d’OMZ avec un seul outil
  • D’autres utilisateurs citent comme alternatives Zimfw, Atuin ou encore un prompt bash écrit à la main

10 commentaires

 
tesha001 2026-01-12

Je n’avais pas encore trouvé ça assez gênant pour que ce soit vraiment perceptible.

 
princox 2026-01-12

Ce n’est pas un serveur web, et tant que ça ne va pas au point d’être gênant, je laisse passer..

 
zxcv123 2026-01-11

Typique des développeurs : ils font tout un cirque pour quelques ms qui ne servent à rien, lol.

 
edunga1 2026-01-12

J’ai commencé avec omz, donc je pensais que cette gêne faisait simplement partie du lot, snif snif.
Récemment, j’ai retiré les plugins un par un et j’ai aussi modifié la politique de mise à jour… mais en voyant ça, je me dis qu’on peut très bien s’en passer.
Moi, quand je charge la configuration avec tmuxinator, je n’aime pas trop voir apparaître le prompt de mise à jour omz avec y/n.

 
devfluotin 2026-01-12

Je suis passé à prezto il y a quelques mois, et ça m’a fait me demander si omz était vraiment aussi lent.
Rien qu’avec quelques plugins de base, ça devenait nettement plus lent...

 
wedding 2026-01-14

Je suis passé à starship.

 
kayws426 2026-01-12

N’est-ce pas justement pour quelques millisecondes inutiles que la technologie progresse ?

 
t7vonn 2026-01-11

Si vous utilisez souvent le terminal, la latence supplémentaire ajoutée par omz est franchement désagréable.

 
GN⁺ 2026-01-11
Commentaires sur Hacker News
  • Je n’ai qu’une seule raison d’utiliser oh-my-zsh
    obtenir un environnement shell immédiatement productif que je peux utiliser tout de suite sur une nouvelle machine, un hôte distant ou un conteneur
    plutôt que de passer des heures à bricoler la configuration, je préfère consacrer ce temps à des choses plus importantes

    • Je recommanderais d’essayer Starship
      on garde l’expérience « prêt à l’emploi après installation », mais sans plus de 200 ms de latence sur le prompt
      l’installation se fait avec une simple ligne de curl, et la configuration est simple
      à mon avis, vous ne le regretterez pas
    • Si c’est une machine qui autorise une configuration personnalisée, je pense qu’il vaut mieux copier ses propres dotfiles
      une fois les fichiers de configuration créés et versionnés avec git, on peut les réutiliser tels quels sur d’autres machines
      moi aussi, quand je configure une nouvelle machine, il me suffit de récupérer mes dotfiles pour retrouver immédiatement mon environnement habituel
    • Au fond, les dotfiles n’ont-ils pas été faits pour ça ?
      c’est une blague, mais copier un .bashrc est bien plus simple que d’installer un shell complet par défaut
    • J’ai aussi utilisé Oh My Zsh, mais j’ai fini par abandonner parce que c’était trop lent
      devoir attendre à chaque ouverture d’onglet m’agaçait
      j’ai finalement installé moi-même quelques plugins nécessaires avec Homebrew, et ça m’a pris moins d’une heure
      maintenant, j’ai un shell rapide et léger, et je suis bien plus productif et à l’aise
    • Zim est aussi une bonne option. C’est plus rapide qu’Oh My Zsh et plus simple à configurer
      le démarrage du shell est très rapide et la mise en place est facile
  • C’est pour ça que je suis passé à fish
    ce n’est pas parfaitement à mon goût, mais la configuration par défaut est suffisamment bonne pour que je m’y sois simplement habitué
    maintenant, je n’ai presque plus à me soucier de la configuration du shell

    • L’avantage de cette approche, c’est que sur n’importe quel hôte, il suffit d’installer fish pour retrouver le même environnement sans configuration supplémentaire
    • fish offre d’excellentes performances et une très bonne UX dès l’état initial
      en revanche, je recommande aux débutants de bien lire les raccourcis clavier
      un collègue d’équipe ne connaissait pas les complétions avec tab ou des fonctions comme shift+arrow, et cela l’a déjà ralenti
    • Je me demande ce qu’il manque réellement à la configuration par défaut
      moi, j’ajoute parfois seulement des bindings vim ou un plugin de fuzzy find
      fish de base est déjà largement excellent
  • Je ne suis pas d’accord avec l’idée de recommander d’activer le mode Vim dans Zsh
    le readline par défaut est déjà largement suffisant pour une commande simple
    pour les longues commandes, on peut les éditer avec C-x C-e
    en pair programming, le changement de mode de Vim donne au contraire l’impression de ralentir

    • Je viens d’apprendre à quel point le raccourci C-x C-e est vraiment utile
    • Moi aussi, après avoir activé le mode Vim, j’ai réajouté les bindings readline
      je reste la plupart du temps en mode insertion, et je n’utilise C-x C-e que quand une modification importante est nécessaire
    • Le changement de mode ne demande qu’une seule touche, donc il n’y a aucune raison que ce soit plus lent
      si on est habitué aux bindings vi, des commandes comme w, b, dw sont plus rapides par mémoire musculaire
      ouvrir l’éditeur casse le flux et masque aussi la sortie, donc je préfère éviter
      j’aimerais que le shell propose aussi des fonctions de Vim comme la suppression entre caractères (di")
  • Moi aussi, je n’utilise oh-my-zsh que comme base de configuration
    je n’utilise qu’un plugin git, et mes fonctions personnalisées sont chargées automatiquement
    mesuré avec hyperfine, le shell de connexion prenait 54 ms et le shell normal environ 6 ms
    je pense que les 380 ms de latence peuvent venir d’autre chose

    • Si la performance de zsh vous intéresse, je recommande zsh4humans
      le démarrage immédiat est possible, et le fait que le projet soit en mode maintenance évite au contraire de perdre du temps
    • zsh -l est un shell de connexion, donc il ne charge pas zshrc
      il faut tester avec zsh -ic exit
      pour plus de détails, voir le guide zsh-bench
    • Pour une mesure plus précise, il vaut mieux ajouter zprof à .zshrc
      zmodload zsh/zprof
      ...
      zprof
      
    • Je recommande aussi de faire le benchmark à l’intérieur d’un dépôt git
    • Je conseille également d’essayer des plugins comme extract, z, fzf
  • Je suis passé à la combinaison fish + starship
    fish fournit nativement l’autocomplétion et la coloration syntaxique, ce qui remplace les fonctions principales d’oh-my-zsh
    voir cet article

    • Cela dit, fish est non compatible POSIX, ce qui reste gênant
      c’est pourquoi je conserve zsh+starship+un simple script d’initialisation
      j’aimerais que fish fonctionne parfaitement « tout simplement », mais il lui manque encore quelque chose
    • J’ai moi aussi utilisé zsh pendant des dizaines d’années, mais je suis passé à fish l’an dernier et je l’utilise toujours
      l’absence de HEREDOC et l’impossibilité de faire des blocs en arrière-plan sont gênantes,
      mais aujourd’hui je préfère souvent les langages compilés en binaire unique pour remplacer les scripts complexes
      quand ce sera plus stable, je pense passer à nushell
    • En réalité, fish est déjà largement excellent tel quel, donc il y a très peu besoin de le personnaliser
  • Je suis passé à Zim il y a quelques années
    il a toutes les fonctions dont j’ai besoin, et il est rapide et simple à installer
    https://zimfw.sh/

    • Zimfw possède un système d’installation très rapide et flexible
      il prend en charge diverses sources et divers formats, et l’intégration du code zsh est excellente
      en matière de vitesse et de compatibilité, c’est bien meilleur que la plupart des systèmes de plugins
      c’est vraiment un framework remarquable
  • J’ai installé oh-my-zsh à l’université, il y a environ 15 ans,
    et depuis, j’en suis tellement satisfait que je n’ai jamais ressenti le besoin d’essayer un autre shell ou une autre configuration
    c’est la première chose que j’installe à chaque fois que je configure un nouvel ordinateur

  • J’utilisais oh-my-zsh depuis longtemps, mais cette fois je l’ai supprimé en 5 minutes avec l’aide de Claude
    j’ai remplacé uniquement les fonctions dont j’avais besoin par du raw zsh
    comme j’utilise starship pour le prompt, je n’ai presque pas eu besoin de configuration supplémentaire
    jusqu’ici, tout semble fonctionner correctement

  • Certaines personnes trouvent exagéré de considérer comme un problème les 0,5 seconde de latence d’oh-my-zsh
    elles disent qu’utiliser simplement bash et KDE konsole suffit largement
    pour elles, le shell n’est qu’un simple wrapper de travail, et il n’y a pas lieu de s’inquiéter de ce genre de micro-optimisations

    • Mais si on travaille principalement dans le terminal, on finit par ouvrir des dizaines de shells par jour
      chaque shell fait partie du flux de travail, donc même une seconde de latence se ressent
      c’est pourquoi je pense qu’un shell rapide est important
    • À l’inverse, quelqu’un demande combien de fois par jour on ouvre réellement un shell
      au maximum une vingtaine, et dans ce cas ce ne serait pas un gros problème
    • Une autre personne estime qu’il faut simplement voir cela comme une question de préférence personnelle
      c’est bien d’avoir de bonnes performances, mais selon elle ce n’est pas un problème fondamental
  • Ma configuration zsh fait environ 90 lignes et n’utilise que 3 plugins (compinit, vcs-info, edit-command-line)
    le temps total de démarrage à fermeture est d’environ 0,32 seconde
    dans les gros dépôts, il y a une latence liée à la récupération des informations de branche
    l’utilitaire de cache bkt (https://github.com/dimo414/bkt) permet de résoudre ce problème
    Starship semble probablement utiliser une stratégie de cache similaire

 
roxie 2026-02-27

Sans optimisation, c’est vraiment lent. Mais je me suis habitué à beaucoup de ses fonctionnalités, donc ce n’est pas si facile de le quitter...