zsh inizia incredibilmente lentamente


63

ZSH impiega circa un secondo e mezzo dalla creazione di una nuova finestra terminale per essere pronto. Sono abbastanza sicuro che il colpevole sia compinit.

Non sono stato in grado di trovare una buona documentazione su, compinit,ma sembra che dovrebbe essere memorizzato nella cache tutte le cose necessarie in alcuni file come .zcompdump.

Qualche trucco per accelerarlo?

Risposte:


33

oh-my-zshimpiegava circa 1,5 secondi per avviarsi sul mio laptop. Ho scritto alcuni dei passi che ho fatto per ridurlo a circa 0,25 secondi .

Un'altra anima gentile ha riassunto i passaggi necessari per integrare le mie modifiche nella tua copia di oh-my-zsh.

Il problema più grande è che compinitveniva chiamato un sacco di volte in più invece che una sola volta dopo che il percorso era stato completamente definito. Ho apportato queste modifiche al mio ramo di oh-my-zshsu github. I cambiamenti sono stati discussi su github e sembrano funzionare bene per alcune persone. Si spera che i cambiamenti saranno integrati oh-my-zshnel prossimo futuro.


4
Per i futuri lettori, credo che tutti questi cambiamenti siano stati ora integrati a monte.
Michael Mior,

1
Le modifiche potrebbero essere state spostate a monte, ma rimuovere Git dai plugin mi ha aiutato in modo sostanziale.
kylehotchkiss,

25

Mentre ZSH ha la sua equa quota di rallentamenti, se trovi la finestra del terminale vuota per alcuni istanti prima di vedere la Last Login:linea, dovrai cancellare i tuoi file di registro per vedere i miglioramenti della velocità. Questo è ancora un problema a partire da OSX Lion e dovrà essere fatto ogni diversi mesi. Lame, lo so.

Il comando è:

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

Naturalmente, si deve leggere questo articolo in anticipo e in modo da sapere esattamente che cosa sta succedendo, perché in esecuzione tutto ciò che dice sudo rmha bisogno di essere pensato. L'ho messo qui solo perché l'uso di ZSH dimostra la tua competenza con la riga di comando per iniziare.


1
Grazie, una soluzione così semplice per qualcosa che mi ha tormentato per così tanto tempo!
Decano del

7
Consiglierei di non utilizzare -rpoiché non sono coinvolte directory e non è necessario. Ometterlo porta a meno lacrime se qualcuno digita sudo rm -rf / private/var/log/asl*.asl(spazio prima del privato) per errore.
Decano del

1
O ancora più sicuro, cd /private/var/log/aslquindi rm -f *.asl. Anche per la cronaca, questa risposta mi ha salvato da un tempo di avvio che si stava avvicinando a 10 secondi, grazie mille!
Garrett Disco

1
Ha funzionato per me! A proposito trash /private/var/log/asl*.asl. trashdovrà essere installato, ovviamente. brew install trash
Mike D,

12

Il mio più grande miglioramento è venuto dalla rimozione di elementi dalla sezione plugin = (). I plugin 'github' e 'brew' sono molto lenti da caricare.

Ho anche rimosso l' hub a cui avevo gitcreato un'alleanza e che ha accelerato anche il prompt.

Ho usato '/ usr / bin / time zsh -i -c exit' per registrare i tempi di avvio, tuttavia compinitnon sembra fare una differenza abbastanza grande per me.

Sarebbe bello sentire cosa fanno gli altri per accelerarlo.


1
La rimozione del plugin githube ha brewrisolto immediatamente il mio problema.
Peter Niederwieser,

gite i brewplugin sono abbastanza essenziali per me. Rimuovendo il rubyplugin ho risolto il mio problema. Grazie.
Ivan ZG Xiao

6

Stai usando il preinstallato /bin/zsho un altro? Chiedo, perché lo zsh che ho installato tramite Fink inizia terribilmente lento a causa della sua inclusione di modelli zsh , mentre la vaniglia si avvia subito.

L'esecuzione con un dumpfile esplicito ( compinit -d dumpfile) lo rende più veloce? La pagina man lo afferma

La prossima chiamata di compinit leggerà il file scaricato invece di eseguire un'inizializzazione completa.


2
Sto usando Oh My Zsh (che a mio avviso usa il valore predefinito / bin / zsh). Quando disabilito il caricamento di tutti i plugin di Oh My Zsh e quant'altro, si carica molto rapidamente, ma penso che in quel caso compinitnon venga mai chiamato. Quando chiamo manualmente compinitci vuole un po 'di tempo. Forse è solo perché Oh My Zsh aggiunge così tanti attacchi al compinit?
Eli,

5

Ora oh-my-zsh controlla l'opzione speciale di configurazione git oh-my-zsh.hide-status prima di interrogare lo stato. Quindi corri

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

sul deposito problematico.


per me ho dovuto disabilitare il plugin git in .zshrc. Attualmente sto affrontando problemi con la risposta lenta di Internet, che ha rallentato zsh
Paschalis,

5

Zsh da solo si avvia in circa 0,1 secondi per me, il che è abbastanza buono. Ho appena notato mentre mi avvicinavo al segno della cronologia dei comandi di 50.000 che è diventato più simile a 3 secondi per caricare il primo prompt.

Non so come voi ragazzi stiate trovando tutte queste altre ragioni per l'avvio lento, ma la mia è stata esattamente la mia prima ipotesi. Ho fatto un mv ~/.zsh_history zsh_history_backupbam, l'avvio di 3 secondi è ora l'avvio di 0,1 secondi. Curiosamente, /usr/bin/time /bin/zsh -i -c exitnon riesce a catturare il tempo necessario per caricare nella cronologia.

Se non hai decine di migliaia di comandi nella tua cronologia zsh, però, non è così. Ho ~/.zsh_historymisurato 1,8 MB. È molto possibile incollare accidentalmente un grosso pezzo di roba come comando in un terminale, anche questo gonfierà rapidamente la storia (anche se questo è qualcosa da evitare, poiché può essere estremamente distruttivo).


Questa è la risposta Se non ho fatto nulla di speciale (molti plugin e componenti aggiuntivi) con oh-my-zsh, allora garantisco che è a causa del registro della cronologia. Il cambiamento è immediato.
Sebastialonso,

2

Stavo usando il tema "af-magic"

Il passaggio a "muse" ha risolto il problema.

Modifica ~ / .zshrc e modifica quella riga:

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

grazie per la risposta, ho scoperto che il passaggio da af-magic a qualcos'altro ha risolto il problema. È interessante notare che il ripristino di af-magic funziona ancora alla grande. non sono sicuro di cosa sia successo sotto il cofano.
Sarat,

0

Ho davvero migliorato la velocità dopo aver cancellato la directory ~ / .oh-my-zsh / plugins /. Al suo interno c'erano molti plugin non utilizzati.


0

Aggiungi quanto segue al tuo ~ / .zshenv

skip_global_compinit=1
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.