17 puntos por GN⁺ 2026-01-11 | 10 comentarios | Compartir por WhatsApp
  • Oh My Zsh (OMZ) sigue siendo ampliamente recomendado, pero provoca una carga innecesaria de scripts que ralentiza el tiempo de inicio del shell
  • OMZ está escrito en shell script, por lo que cada vez que se abre una nueva pestaña del terminal tiene que interpretar todos los scripts, y solo con la configuración predeterminada ya introduce una demora de ~0.38 segundos
  • Con una configuración mínima de Zsh, el prompt de Starship y búsqueda en el historial basada en fzf, es posible reducir el tiempo de inicio a 0.07 segundos
  • Starship construye el prompt con un solo binario, reemplazando los plugins de git, entornos virtuales y lenguajes que antes aportaba OMZ
  • En lugar de usar plugins complejos, resulta más eficiente una configuración ligera del shell donde se agregue manualmente solo lo necesario

Problemas de rendimiento de Oh My Zsh

  • Oh My Zsh (OMZ) sigue siendo muy usado, pero su sobrecarga innecesaria (bloat) reduce la velocidad de inicio del shell
    • OMZ está compuesto por shell scripts, así que cada vez que se abre una nueva pestaña del terminal hay que interpretar todos los scripts
    • En una configuración con plugins básicos (git, zsh-autosuggestions, zsh-autocomplete), ejecutar /usr/bin/time -f "%e seconds" zsh -i -c exit toma 0.38 segundos
  • Si se abre una pestaña nueva dentro de una carpeta de repositorio git, la demora percibida llega a ser de aproximadamente 1 segundo
  • OMZ revisa periódicamente si hay actualizaciones, y ese proceso puede causar varios segundos de demora adicional
  • Actualizar con frecuencia la configuración del shell no es necesario, y se recomienda una configuración simple donde se agregue manualmente solo la funcionalidad necesaria

Configuración mínima de Zsh

  • La configuración mínima de Zsh propuesta es la siguiente
    export HISTSIZE=1000000000
    export SAVEHIST=$HISTSIZE
    setopt EXTENDED_HISTORY
    setopt autocd
    autoload -U compinit; compinit
    
    • HISTSIZE y SAVEHIST definen el tamaño del historial de comandos
    • EXTENDED_HISTORY agrega marcas de tiempo al historial
    • autocd permite cambiar de directorio sin usar el comando cd
    • compinit inicializa el sistema de autocompletado
  • Solo con esta configuración ya se obtiene un entorno básico de shell con autocompletado

Personalización del prompt

  • Para el prompt se usa Starship
    • Starship es un prompt rápido y minimalista compuesto por un solo binario
    • Reemplaza los plugins y temas de OMZ, mostrando el estado de git, entornos virtuales y lenguajes
  • En el ejemplo de configuración de Starship, se desactivan indicadores relacionados con la nube como AWS, GCP, Azure y NodeJS para reducir el ruido visual
  • En proyectos de Python y Rust, cada lenguaje se resalta en el prompt y también se muestra el tiempo de ejecución de los comandos
  • Se activa agregando esta línea a .zshrc
    eval "$(starship init zsh)"
    

Búsqueda en el historial

  • El plugin zsh-autosuggestions, usado comúnmente, muestra sugerencias mientras se escribe y puede distraer la atención
  • En su lugar, se enlaza fzf a Ctrl+R para explorar el historial con búsqueda difusa interactiva (fuzzy search)
    source <(fzf --zsh)
    

Resultado de la mejora de rendimiento

  • Después de aplicar esta configuración, el tiempo de inicio del shell queda así
    ❯ /usr/bin/time -f "%e seconds" zsh -i -c exit
    0.07 seconds
    
  • Se logra una velocidad de inicio más de 5 veces superior frente a OMZ

Consejo adicional

  • Los usuarios de Vim pueden activar el modo Vim en Zsh para mejorar la velocidad al editar comandos
    set -o vi
    bindkey -v '^?' backward-delete-char
    
    • Como zle usa por defecto atajos de teclado de Emacs, esta configuración habilita la entrada al estilo Vim

Conclusión y casos de uso

  • Tras cambiar desde OMZ, el autor se adaptó al nuevo flujo de trabajo en pocos días
  • Los plugins necesarios pueden cargarse manualmente
  • La razón para abrir muchas pestañas es que usa tmux junto con un editor basado en terminal (helix)
    • En tmux ejecuta lazygit y el gestor de archivos yazi en ventanas emergentes
    • Usa paneles divididos temporales para ejecutar código y ver resultados de pruebas, y cada uno funciona como una sesión de shell separada

Resumen de comentarios

  • Algunos usuarios sostienen que el tiempo de inicio de OMZ, de alrededor de 0.03 segundos, ya es suficientemente rápido
  • El autor señala que el plugin zsh-autocomplete es el que degrada el rendimiento
  • En resultados de zsh-bench, la demora hasta el primer prompt en OMZ es de 603 ms, mientras que una configuración simple de Zsh marca 103 ms
  • Starship reemplaza las funciones relacionadas con el prompt de OMZ con una sola herramienta
  • Otros usuarios mencionan alternativas como Zimfw, Atuin y prompts de bash hechos a mano

10 comentarios

 
roxie 2026-02-27

Si no lo optimizas, de verdad se vuelve bastante lento. Pero ya me acostumbré a muchas de sus funciones, así que la verdad no es tan fácil dejarlo,,

 
tesha001 2026-01-12

Todavía no se sentía tan incómodo como para que llamara mucho la atención.

 
princox 2026-01-12

No es un servidor web, y mientras no se sienta lo bastante incómodo como para molestar, lo dejo pasar..

 
zxcv123 2026-01-11

Como era de esperarse de los desarrolladores, armando un dramón por unos cuantos ms inútiles jajaja

 
kayws426 2026-01-12

¿No se suponía que la tecnología avanzaba por culpa de unos cuantos ms innecesarios?

 
t7vonn 2026-01-11

Si usas la terminal con frecuencia, la latencia adicional que agrega omz es bastante molesta.

 
edunga1 2026-01-12

Empecé usando omz desde el inicio, así que pensé que esa incomodidad era algo con lo que había que aguantarse T_T
Últimamente he ido quitando los plugins uno por uno y también cambié la política de actualizaciones... pero viendo esto, siento que perfectamente podría prescindir de él.
A mí no me gusta mucho que, cuando cargo la configuración con tmuxinator, aparezca el aviso de actualización de omz con y/n.

 
devfluotin 2026-01-12

Hace unos meses me cambié a prezto, y sí me dio la impresión de que omz era así de lento.
Con solo unos cuantos plugins básicos ya se vuelve notablemente más lento...

 
wedding 2026-01-14

Yo me cambié a Starship.

 
GN⁺ 2026-01-11
Comentarios en Hacker News
  • Solo tengo una razón para usar oh-my-zsh
    Obtener un entorno de shell productivo al instante que pueda usar de inmediato en una máquina nueva, un host remoto o un contenedor
    Prefiero dedicar ese tiempo a cosas más importantes que pasar horas ajustando la configuración yo mismo

    • Recomendaría probar Starship
      Mantiene la experiencia de “instalar y usar de inmediato”, pero sin una latencia del prompt de más de 200 ms
      Se instala con una sola línea de curl, y la configuración también es simple
      Creo que no te vas a arrepentir si lo pruebas
    • Si es una máquina que permite configuración personalizada, creo que es mejor copiar y usar tus propios dotfiles
      Una vez que armas tus archivos de configuración y los gestionas con git, puedes usarlos tal cual en otras máquinas
      Yo también, cuando preparo una máquina nueva, solo traigo mis dotfiles y de inmediato vuelvo a tener mi entorno habitual
    • ¿No se supone que los dotfiles existen justo para eso?
      Es broma, pero copiar .bashrc es muchísimo más simple que instalar un shell completo
    • Yo también usé Oh My Zsh, pero lo dejé porque era demasiado lento
      Me molestaba tener que esperar cada vez que abría una pestaña
      Al final instalé directamente con Homebrew solo unos pocos plugins que necesitaba, y no me tomó ni una hora
      Ahora tengo un shell rápido y liviano y soy mucho más productivo y estoy más a gusto
    • Zim también está bien. Es más rápido que Oh My Zsh y más fácil de configurar
      El shell arranca muy rápido y además es fácil de dejar listo
  • Por eso me cambié a fish
    No es perfecto para mi gusto, pero la configuración por defecto es lo bastante buena como para que simplemente me acostumbrara
    Ahora casi nunca tengo que preocuparme por configurar el shell

    • La ventaja de este enfoque es que, en cualquier host, si instalas fish puedes usar el mismo entorno sin configuración adicional
    • fish tiene muy buen rendimiento y una UX excelente incluso tal como viene
      Eso sí, a los principiantes les recomendaría leer bien los atajos de teclado
      Una vez un compañero de equipo iba más lento porque no conocía funciones como el autocompletado con tab o shift+arrow
    • Me da curiosidad qué es lo que sienten que le falta a la configuración por defecto
      Yo a veces solo agrego bindings de vim o un plugin de búsqueda difusa
      fish por sí solo ya es bastante bueno
  • No estoy de acuerdo con la idea de recomendar activar el modo Vim en Zsh
    El readline por defecto ya funciona bastante bien para comandos individuales
    Los comandos largos se pueden editar con C-x C-e
    Cuando hago pair programming, el cambio de modo de Vim más bien se ve más lento

    • Recién me entero de que el atajo C-x C-e es realmente útil
    • Yo también volví a agregar bindings de readline después de activar el modo Vim
      Casi siempre estoy en modo insert, y solo uso C-x C-e cuando necesito una edición grande
    • Cambiar de modo es solo una tecla, así que no debería ser más lento
      Si ya estás acostumbrado a los bindings vi, comandos como w, b o dw salen más rápido por memoria muscular
      Abrir un editor me corta el flujo y además tapa la salida, así que no me gusta
      Ojalá el shell también tuviera cosas de Vim como borrar entre caracteres (di")
  • Yo también uso oh-my-zsh solo como base de configuración
    Solo uso el plugin de git, y cargo mis funciones personalizadas automáticamente
    Midiéndolo con hyperfine, el shell de login daba unos 54 ms y el shell normal unos 6 ms
    Creo que esa latencia de 380 ms podría deberse a otra causa

    • Si te interesa el rendimiento de zsh, recomiendo zsh4humans
      Tiene inicio instantáneo, y al estar en modo mantenimiento incluso evita perder tiempo innecesariamente
    • zsh -l es un shell de login, así que no carga zshrc
      Hay que probar con zsh -ic exit
      Para más detalles, revisa la guía de zsh-bench
    • Para una medición más precisa, conviene agregar zprof a .zshrc
      zmodload zsh/zprof
      ...
      zprof
      
    • También recomiendo hacer el benchmark dentro de un repositorio git
    • También vale la pena probar plugins como extract, z y fzf
  • Me cambié a la combinación fish + starship
    fish ofrece por defecto autocompletado y resaltado de sintaxis, así que reemplaza las funciones principales de oh-my-zsh
    Consulta este artículo relacionado

    • Pero fish tiene el inconveniente de que no es compatible con POSIX
      Por eso yo mantengo zsh+starship+un script de init simple
      Ojalá fish funcionara perfectamente “sin más”, pero todavía se queda un poco corto
    • Yo también usé zsh durante décadas, pero desde el año pasado me pasé a fish y lo sigo usando
      Es incómodo que no tenga HEREDOC y que no se puedan hacer bloques en segundo plano,
      pero hoy prefiero lenguajes que compilan a un binario único en vez de scripts complejos
      Cuando se estabilice, pienso pasarme a nushell
    • La verdad es que fish ya es lo bastante bueno tal como viene, así que casi no hace falta personalizarlo
  • Yo me cambié a Zim hace algunos años
    Tiene todo lo que necesito, es rápido y fácil de instalar
    https://zimfw.sh/

    • Zimfw tiene un sistema de instalación muy rápido y flexible
      Soporta varias fuentes y formatos, y además integra muy bien el código zsh
      Tiene mucha mejor velocidad y compatibilidad que la mayoría de los sistemas de plugins
      Es un framework realmente genial
  • En la universidad, hace unos 15 años, instalé oh-my-zsh,
    y desde entonces quedé tan satisfecho que nunca sentí la necesidad de probar otro shell u otra configuración
    Es de lo primero que instalo cada vez que preparo una computadora nueva

  • Llevo mucho tiempo usando oh-my-zsh, pero esta vez lo eliminé en 5 minutos con ayuda de Claude
    Reemplacé solo lo que necesitaba con raw zsh
    Como uso starship como prompt, casi no necesité configuración adicional
    Hasta ahora parece que todo funciona bien

  • Hay quien piensa que exagerar con la latencia de 0.5 segundos de oh-my-zsh es demasiado
    Dice que con bash y KDE konsole es más que suficiente
    Que el shell no es más que un wrapper para trabajo simple, así que no vale la pena preocuparse por esta clase de microoptimizaciones

    • Pero si trabajas centrado en la terminal, abres decenas de shells al día
      Como cada shell es parte del flujo de trabajo, incluso un retraso de 1 segundo se siente bastante
      Por eso creo que tener un shell rápido sí importa
    • En cambio, hay quien pregunta cuántas veces al día abre uno el shell
      Que a lo mucho serán unas 20 veces, y que con eso no es un problema importante
    • Otra persona dice que esto, en el fondo, es más bien una cuestión de preferencia personal
      Está bien preferir mejor rendimiento, pero no cree que sea un problema esencial
  • Mi configuración de zsh tiene unas 90 líneas y solo uso 3 plugins (compinit, vcs-info, edit-command-line)
    Tarda unos 0.32 segundos de inicio a salida
    En repositorios grandes aparece latencia al obtener la información de la rama
    La utilidad de caché bkt (https://github.com/dimo414/bkt) puede resolver este problema
    Supongo que Starship también usa caché de una forma parecida