zsh comienza increíblemente lento


63

ZSH tarda aproximadamente un segundo y medio desde la creación de una nueva ventana de terminal para estar listo. Estoy bastante seguro de que el culpable es compinit.

No he podido encontrar buena documentación, compinit,pero parece que debería estar almacenando en caché todas las cosas necesarias en algún archivo como .zcompdump.

¿Algún truco para acelerarlo?

Respuestas:


33

oh-my-zshestaba tardando aproximadamente 1,5 segundos en iniciarse en mi computadora portátil. Escribí algunos de los pasos que tomé para reducirlo a aproximadamente 0.25 segundos .

Otra alma amable resumió los pasos necesarios para integrar mis cambios en su copia de oh-my-zsh.

El mayor problema es que compinitse llamaba un montón de veces adicionales en lugar de solo una vez después de que se definió completamente la ruta de acceso. Hice esos cambios en mi rama de oh-my-zshgithub. Los cambios se han discutido en github y parecen estar funcionando bien para algunas personas. Esperemos que los cambios se fusionen oh-my-zshen un futuro próximo.


44
Para los futuros lectores, creo que todos estos cambios se han fusionado río arriba.
Michael Mior

1
Los cambios pueden haberse movido hacia arriba, pero eliminar Git de los complementos me ha ayudado sustancialmente.
kylehotchkiss

25

Si bien ZSH tiene su propia cuota de desaceleraciones, si encuentra la ventana de terminal en blanco por unos momentos antes de ver la Last Login:línea, tendrá que borrar sus archivos de registro para ver mejoras en la velocidad. Esto sigue siendo un problema a partir de OSX Lion y deberá hacerse cada varios meses. Cojo, lo sé.

El comando es:

sudo rm -rf /private/var/log/asl/*.asl

Por supuesto, usted necesita leer este artículo de antemano y por lo que saber exactamente lo que está pasando, porque la ejecución de todo lo que dice sudo rmnecesita ser pensado. Solo puse esto aquí porque su uso de ZSH demuestra su competencia con la línea de comando para comenzar.


1
¡Gracias, una solución tan simple para algo que me ha estado atormentando durante tanto tiempo!
Dean

77
Recomiendo no usarlo -rya que no hay directorios involucrados y no es necesario. Omitirlo conduce a menos lágrimas si alguien escribe sudo rm -rf / private/var/log/asl*.asl(espacio antes que privado) por error.
Dean

1
O incluso más infalible, cd /private/var/log/aslentonces rm -f *.asl. También para el registro, esta respuesta me salvó de un tiempo de inicio que se acercaba a los 10 segundos, ¡muchas gracias!
Garrett Disco

1
¡Trabajó para mi! Por cierto trash /private/var/log/asl*.asl. trashnecesitará ser instalado, por supuesto. brew install trash
Mike D

12

Mi mayor mejora provino de la eliminación de elementos de la sección plugin = (). Los complementos 'github' y 'brew' son muy lentos de cargar.

También eliminé el concentrador al que me había alias gity que también aceleró el mensaje.

He estado usando '/ usr / bin / time zsh -i -c exit' para registrar los tiempos de inicio, sin embargo compinit, no parece haber una diferencia lo suficientemente grande para mí.

Sería genial escuchar lo que otros están haciendo para acelerarlo.


1
Eliminar los complementos githuby brewresolvió mi problema de inmediato.
Peter Niederwieser

gity los brewcomplementos son bastante esenciales para mí. Al eliminar el rubycomplemento resolvió mi problema. Gracias.
Ivan ZG Xiao

6

¿Estás utilizando el preinstalado /bin/zshu otro? Pregunto, porque el zsh que instalé a través de fink comienza terriblemente lento debido a su inclusión de plantillas zsh , mientras que el vainilla comienza de inmediato.

¿Ejecutar con un archivo de volcado explícito ( compinit -d dumpfile) hace que vaya más rápido? La página del manual dice que

La próxima invocación de compinit leerá el archivo volcado en lugar de realizar una inicialización completa.


2
Estoy usando Oh My Zsh (que creo que usa el valor predeterminado / bin / zsh). Cuando desactivo la carga de todos los complementos de Oh My Zsh y demás, se carga muy rápido, pero creo que en ese caso compinitnunca se llama. Cuando llamo manualmente compinit, lleva un poco de tiempo. ¿Tal vez es solo porque Oh My Zsh agrega tantos enlaces para compinit?
Eli

5

Ahora oh-my-zsh verifica la opción de configuración especial de git oh-my-zsh.hide-status antes de consultar el estado. Entonces corre

git config oh-my-zsh.hide-status 1

en repositorio problemático.


para mí tuve que deshabilitar el complemento git .zshrc. Actualmente estoy enfrentando problemas con la lenta respuesta de Internet, lo que hizo que zsh fuera lento
Paschalis

5

Zsh por sí solo se inicia en alrededor de 0.1 segundos para mí, lo cual es bastante bueno. Acabo de notar cuando me acerqué a la marca del historial de 50,000 comandos que me tomó más de 3 segundos cargar el primer mensaje.

No sé cómo ustedes están encontrando todas estas otras razones para un inicio lento, pero la mía fue exactamente lo que mi primera suposición fue. Hice mv ~/.zsh_history zsh_history_backupay bam, el inicio de 3 segundos ahora es de inicio de 0.1 segundos. Curiosamente, /usr/bin/time /bin/zsh -i -c exitno logra capturar el tiempo que se tarda en cargar en el historial.

Sin embargo, si no tiene decenas de miles de comandos en su historial de zsh, entonces este no lo es. Mi ~/.zsh_historymide 1.8MB. Es muy posible pegar accidentalmente una gran cantidad de cosas como un comando en un terminal, esto también hinchará la historia rápidamente (aunque esto es algo que debe evitarse, ya que obviamente puede ser extremadamente destructivo).


Esta es la respuesta. Si no ha hecho nada elegante (muchos complementos y complementos) con oh-my-zsh, entonces le garantizo que se debe al registro del historial. El cambio es inmediato.
Sebastialonso el

2

Estaba usando el tema "af-magic"

Cambiar a "musa" resolvió el problema.

Edite ~ / .zshrc y modifique esa línea:

#ZSH_THEME="random"
#ZSH_THEME="af-magic"
ZSH_THEME="muse"

Gracias por la respuesta, descubrí que el cambio de una magia mágica a otra cosa ha resuelto el problema. Curiosamente, restaurar la magia aún funciona muy bien. No estoy seguro de lo que pasó debajo del capó.
sarat

0

Tengo grandes mejoras de velocidad después de borrar el directorio ~ / .oh-my-zsh / plugins /. Había muchos complementos no utilizados en su interior.


0

Agregue lo siguiente a su ~ / .zshenv

skip_global_compinit=1
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.