- 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
Personalización del prompt
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
Consejo adicional
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
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,,
Todavía no se sentía tan incómodo como para que llamara mucho la atención.
No es un servidor web, y mientras no se sienta lo bastante incómodo como para molestar, lo dejo pasar..
Como era de esperarse de los desarrolladores, armando un dramón por unos cuantos ms inútiles jajaja
¿No se suponía que la tecnología avanzaba por culpa de unos cuantos ms innecesarios?
Si usas la terminal con frecuencia, la latencia adicional que agrega omz es bastante molesta.
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.
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...
Yo me cambié a Starship.
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
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 simpleCreo que no te vas a arrepentir si lo pruebas
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
Es broma, pero copiar
.bashrces muchísimo más simple que instalar un shell completoMe 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
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
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+arrowYo 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-eCuando hago pair programming, el cambio de modo de Vim más bien se ve más lento
C-x C-ees realmente útilCasi siempre estoy en modo insert, y solo uso
C-x C-ecuando necesito una edición grandeSi ya estás acostumbrado a los bindings vi, comandos como
w,bodwsalen más rápido por memoria muscularAbrir 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 msCreo que esa latencia de 380 ms podría deberse a otra causa
Tiene inicio instantáneo, y al estar en modo mantenimiento incluso evita perder tiempo innecesariamente
zsh -les un shell de login, así que no cargazshrcHay que probar con
zsh -ic exitPara más detalles, revisa la guía de zsh-bench
zprofa.zshrcextract,zyfzfMe 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
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
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
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/
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
starshipcomo prompt, casi no necesité configuración adicionalHasta 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
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
Que a lo mucho serán unas 20 veces, y que con eso no es un problema importante
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