zsh startet unglaublich langsam

63

ZSH benötigt ungefähr eineinhalb Sekunden, um ein neues Terminalfenster zu erstellen und fertig zu sein. Ich bin mir ziemlich sicher, dass der Täter ist compinit.

Ich konnte keine gute Dokumentation finden, compinit,aber es sieht so aus, als ob alle notwendigen Dinge in einer Datei zwischengespeichert werden müssten .zcompdump.

Irgendwelche Tricks, um es zu beschleunigen?

Eli
quelle

Antworten:

33

oh-my-zshIch brauchte ungefähr 1,5 Sekunden, um auf meinem Laptop hochzufahren. Ich habe einige der Schritte, die ich unternommen habe, auf ungefähr 0,25 Sekunden heruntergeschrieben .

Eine andere Art von Seele fasste die Schritte zusammen, die erforderlich sind, um meine Änderungen in Ihre Kopie von oh-my-zsh zu integrieren.

Das größte Problem ist, dass compinitnach der vollständigen Definition des Pfades eine ganze Reihe von Extra-Zeiten statt nur eines genannt wurde. Ich habe diese Änderungen an meinem Zweig von oh-my-zshon github vorgenommen. Die Änderungen wurden auf Github diskutiert und scheinen bei einigen Leuten gut zu funktionieren. Hoffentlich werden die Änderungen oh-my-zshin naher Zukunft übernommen.

Pat Regan
quelle
4
Für zukünftige Leser glaube ich, dass all diese Änderungen jetzt vorgelagert zusammengeführt wurden.
Michael Mior
1
Möglicherweise wurden Änderungen in den Upstream verschoben, aber das Entfernen von Git aus den Plugins hat mir erheblich geholfen.
kylehotchkiss
25

Auch wenn ZSH eine gewisse Anzahl von Verlangsamungen aufweist, müssen Sie Last Login:Ihre Protokolldateien löschen, um Geschwindigkeitsverbesserungen zu erzielen, wenn Sie das Terminalfenster für einige Momente leer lassen, bevor Sie die Linie sehen. Dies ist ab OSX Lion immer noch ein Problem und muss alle paar Monate durchgeführt werden. Lahm, ich weiß.

Der Befehl lautet:

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

Natürlich Sie müssen diesen Artikel vorher lesen und so wissen Sie genau , was los ist, denn alles läuft, der sagt sudo rmBedürfnisse über zu denken. Ich schreibe dies nur hierher, weil Ihre Verwendung von ZSH Ihre Kompetenz beim Starten der Befehlszeile unter Beweis stellt.

kylehotchkiss
quelle
1
Danke, eine so einfache Lösung für etwas, das mich so lange geplagt hat!
Dean
7
Ich würde empfehlen, nicht zu verwenden, -rda keine Verzeichnisse beteiligt sind und es nicht benötigt wird. Das Weglassen führt zu weniger Tränen, wenn jemand versehentlich sudo rm -rf / private/var/log/asl*.asl(Leerzeichen vor privat) eingibt .
Dean
1
Oder noch narrensicher, cd /private/var/log/asldann rm -f *.asl. Außerdem hat diese Antwort mich vor einer Startzeit von fast 10 Sekunden bewahrt, vielen Dank!
Garrett Disco
1
Arbeitete für mich! BTW trash /private/var/log/asl*.asl. trashmuss natürlich installiert werden. brew install trash
Mike D
12

Meine größte Verbesserung war das Entfernen von Elementen aus dem Abschnitt plugin = (). Die Plugins 'Github' und 'Brew' sind sehr langsam zu laden.

Ich habe auch die Nabe entfernt , auf die ich mich geeinigt hatte, gitund das hat auch die Aufforderung beschleunigt.

Ich habe '/ usr / bin / time zsh -i -c exit' verwendet, um die Startzeiten aufzuzeichnen, aber es compinitscheint keinen großen Unterschied für mich zu machen.

Es wäre toll zu hören, was andere tun, um es zu beschleunigen.

xer0x
quelle
1
Das Entfernen der githubund brewPlugins löste mein Problem sofort.
Peter Niederwieser
gitund brewPlugins sind für mich sehr wichtig. Durch das Entfernen des rubyPlugins wurde mein Problem gelöst. Vielen Dank.
Ivan ZG Xiao
6

Verwenden Sie die vorinstallierte /bin/zshoder eine andere? Ich frage, weil die zsh, die ich über fink installiert habe, furchtbar langsam startet, weil sie zsh-Templates enthält , während die Vanille ganz hochfährt.

Läuft compinit -d dumpfilees mit einem expliziten dumpfile ( ) schneller? Die Manpage gibt das an

Beim nächsten Aufruf von compinit wird die gespeicherte Datei gelesen, anstatt eine vollständige Initialisierung durchzuführen.

Joey1978
quelle
2
Ich verwende Oh My Zsh (von dem ich glaube, dass es die Standardeinstellung / bin / zsh verwendet). Wenn ich das Laden aller Oh My Zsh-Plugins und so weiter deaktiviere, wird es sehr schnell geladen, aber ich denke, in diesem Fall compinitwird es nie aufgerufen. Wenn ich manuell anrufe compinit, dauert es eine Weile. Vielleicht liegt es nur daran, dass Oh My Zsh so viele Bindungen zu compinit hinzufügt?
Eli
5

Jetzt überprüft oh-my-zsh die spezielle Git-Konfigurationsoption oh-my-zsh.hide-status, bevor der Status abgefragt wird. Also lauf

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

auf problematische Endlager.

Artem Tikhomirov
quelle
für mich musste ich das git plugin deaktivieren .zshrc. Ich bin derzeit mit Problemen mit langsamen Internet-Antwort konfrontiert, die zsh langsam gemacht
Paschalis
5

Zsh alleine startet für mich in ungefähr 0,1 Sekunden, was gut genug ist. Als ich mich der Marke von 50.000 Befehlen näherte, bemerkte ich nur, dass es ungefähr 3 Sekunden dauerte, bis die erste Eingabeaufforderung geladen war.

Ich weiß nicht, wie ihr all diese anderen Gründe für einen langsamen Start findet, aber meiner war genau das, was ich als erstes vermutet habe. Ich habe ein mv ~/.zsh_history zsh_history_backupund bam, 3 Sekunden Startup ist jetzt 0,1 Sekunden Startup. Kurioserweise wird /usr/bin/time /bin/zsh -i -c exitdie zum Laden des Verlaufs benötigte Zeit nicht erfasst.

Wenn Sie jedoch nicht Zehntausende von Befehlen in Ihrem zsh-Verlauf haben, ist dies nicht der Fall. Meine ~/.zsh_historygemessenen 1,8 MB. Es ist sehr gut möglich, versehentlich einen großen Teil des Materials als Befehl in ein Terminal einzufügen. Dadurch wird auch die Geschichte schnell aufgebläht (obwohl dies sehr zu vermeiden ist, da es offensichtlich äußerst destruktiv sein kann).

Steven Lu
quelle
Das ist die Antwort. Wenn Sie mit oh-my-zsh nichts Besonderes gemacht haben (viele Plugins und Addons), dann liegt das garantiert am Verlaufsprotokoll. Die Änderung erfolgt sofort.
Sebastialonso
2

Ich habe das thema "af-magic" benutzt

Der Wechsel zu "Muse" löste das Problem.

Bearbeiten Sie ~ / .zshrc und ändern Sie diese Zeile:

#ZSH_THEME="random"
#ZSH_THEME="af-magic"
ZSH_THEME="muse"
mika
quelle
danke für die antwort, ich habe festgestellt, dass der wechsel von af-magic zu etwas anderem das problem gelöst hat. Interessanterweise funktioniert das Wiederherstellen von Af-Magic immer noch hervorragend. Ich weiß nicht, was unter der Haube vor sich ging.
Sarat
0

Ich habe wirklich große Geschwindigkeitsverbesserungen nach dem Löschen von ~ / .oh-my-zsh / plugins / directory. Es gab viele unbenutzte Plugins.

pinguinjkeke
quelle
0

Fügen Sie Ihrem ~ / .zshenv Folgendes hinzu

skip_global_compinit=1
FacePalm
quelle