Zsh zaczyna się niezwykle powoli

63

ZSH zajmuje około półtorej sekundy od utworzenia nowego okna terminala do gotowości. Jestem prawie pewien, że winowajcą jest compinit.

Nie udało mi się znaleźć dobrej dokumentacji, compinit,ale wygląda na to, że powinna ona buforować wszystkie niezbędne rzeczy w jakimś pliku .zcompdump.

Jakieś sztuczki na przyspieszenie?

Eli
źródło

Odpowiedzi:

33

oh-my-zshuruchomienie mojego laptopa zajęło mi około 1,5 sekundy. Zapisałem niektóre kroki, które podjąłem, aby zredukować to do około 0,25 sekundy .

Inna miła dusza streściła kroki niezbędne do zintegrowania moich zmian z twoją kopią oh-my-zsh.

Największym problemem jest to, compinitże nazywano go całą masą dodatkowych czasów, a nie tylko raz po tym, jak fpath został całkowicie zdefiniowany. Wprowadziłem te zmiany w moim oddziale oh-my-zshna github. Zmiany zostały omówione na githubie i wydają się działać dobrze dla kilku osób. Mamy nadzieję, że zmiany zostaną połączone oh-my-zshw najbliższej przyszłości.

Pat Regan
źródło
4
Dla przyszłych czytelników uważam, że wszystkie te zmiany zostały scalone wcześniej.
Michael Mior
1
Zmiany mogły zostać przeniesione wcześniej, ale usunięcie Git z wtyczek znacznie mi pomogło.
kylehotchkiss
25

Chociaż ZSH ma swój własny spowolnienie, jeśli okaże się, że okno terminala jest puste przez kilka chwil, zanim zobaczysz Last Login:linię, będziesz musiał wyczyścić pliki dziennika, aby zobaczyć poprawę prędkości. Jest to nadal problem dotyczący systemu OSX Lion i należy go wykonywać co kilka miesięcy. Kulawy, wiem.

Polecenie to:

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

Oczywiście, ty potrzebujesz , aby przeczytać ten artykuł wcześniej i tak wiesz dokładnie, co się dzieje, ponieważ działa wszystko, co mówi, sudo rmmusi być zastanowił. Umieściłem to tutaj tylko dlatego, że korzystanie z ZSH świadczy o kompetencji w uruchamianiu wiersza poleceń.

kylehotchkiss
źródło
1
Dzięki, takie proste rozwiązanie dla czegoś, co dręczyło mnie tak długo!
Dziekan
7
Polecam nie używać, -rponieważ nie są zaangażowane żadne katalogi i nie jest to potrzebne. Pominięcie go powoduje mniej łez, jeśli ktoś sudo rm -rf / private/var/log/asl*.aslprzez pomyłkę pisze (spacja przed prywatnym).
Dziekan
1
Lub nawet bardziej niezawodny, cd /private/var/log/asla następnie rm -f *.asl. Również dla przypomnienia, ta odpowiedź uratowała mnie od czasu uruchamiania, który zbliżał się do 10 sekund, wielkie dzięki!
Garrett Disco
1
Pracował dla mnie! BTW trash /private/var/log/asl*.asl. trashoczywiście będzie musiał zostać zainstalowany. brew install trash
Mike D
12

Moje największe ulepszenie przyniosło usunięcie elementów z sekcji plugin = (). Wtyczki „github” i „brew” są bardzo wolno ładowane.

Usunąłem również hub, do którego miałem alias, gitco przyspieszyło również monit.

Używałem „/ usr / bin / time zsh -i -c exit” do rejestrowania czasów uruchamiania, jednak compinitnie wydaje mi się, aby miało to dla mnie wystarczająco dużą różnicę.

Byłoby wspaniale usłyszeć, co robią inni, aby to przyspieszyć.

xer0x
źródło
1
Usunięcie wtyczek githubi brewwtyczek natychmiast rozwiązało mój problem.
Peter Niederwieser
gita brewwtyczki są dla mnie niezbędne. Usunięcie rubywtyczki rozwiązało mój problem. Dzięki.
Ivan ZG Xiao,
6

Czy korzystasz z preinstalowanego /bin/zshczy innego? Pytam, ponieważ zsh, który zainstalowałem przez Fink, zaczyna się strasznie wolno z powodu włączenia szablonów zsh , podczas gdy wanilia zaczyna się od razu.

Czy uruchamianie z jawnym plikiem zrzutu ( compinit -d dumpfile) powoduje, że działa szybciej? Strona podręcznika stwierdza, że

Następne wywołanie compinit odczyta zrzut pliku zamiast pełnej inicjalizacji.

Joey1978
źródło
2
Używam Oh My Zsh (który moim zdaniem używa domyślnego / bin / zsh). Kiedy wyłączam ładowanie wszystkich wtyczek Oh My Zsh i tak dalej, ładuje się bardzo szybko, ale myślę, że w takim przypadku compinitnigdy nie jest wywoływane. Kiedy dzwonię ręcznie compinit, zajmuje to trochę czasu. Może to tylko dlatego, że Oh My Zsh dodaje tak wiele powiązań do współzależności?
Eli
5

Teraz oh-my-zsh sprawdza specjalną opcję konfiguracji git oh-my-zsh.hide-status przed zapytaniem o status. Więc biegnij

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

w problematycznym repozytorium.

Artem Tichomirow
źródło
dla mnie musiałem wyłączyć wtyczkę git .zshrc. Obecnie mam problemy z powolną odpowiedzią internetową, która spowolniła działanie zsh
Paschalis
5

Zsh sam się uruchamia w około 0,1 sekundy, co jest wystarczająco dobrym wynikiem. Właśnie zauważyłem, gdy zbliżyłem się do znaku 50 000 historii poleceń, że ładowanie pierwszego monitu stało się bardziej jak 3 sekundy.

Nie wiem, jak znaleźliście te wszystkie powody powolnego uruchamiania, ale mój był dokładnie taki, jak sądziłem. Zrobiłem A mv ~/.zsh_history zsh_history_backupi BAM, 3 sekundowe uruchomienie to teraz 0.1 sekundowe uruchomienie. Co ciekawe, /usr/bin/time /bin/zsh -i -c exitnie udało się uchwycić czasu potrzebnego do załadowania historii.

Jeśli jednak nie masz dziesiątek tysięcy poleceń w historii zsh, to nie o to chodzi. Mój ~/.zsh_historyzmierzył 1,8 MB. Bardzo możliwe jest przypadkowe wklejenie dużej ilości rzeczy jako polecenia do terminala, spowoduje to również szybkie powiększenie historii (choć jest to coś, czego należy bardzo unikać, ponieważ może to być wyjątkowo destrukcyjne).

Steven Lu
źródło
Oto odpowiedź. Jeśli nie zrobiłem nic fantazyjnego (dużo wtyczek i dodatków) z oh-my-zsh, to gwarantuję to z powodu historii. Zmiana jest natychmiastowa.
Sebastialonso,
2

Używałem motywu „af-magic”

Przejście na „muzę” rozwiązało problem.

Edytuj ~ / .zshrc i zmodyfikuj ten wiersz:

#ZSH_THEME="random"
#ZSH_THEME="af-magic"
ZSH_THEME="muse"
Mika
źródło
dzięki za odpowiedź, znalazłem zmianę z af-magii na coś innego, co rozwiązało problem. Co ciekawe, przywracanie af-magii nadal działa świetnie. nie jestem pewien, co się działo pod maską.
sarat
0

Naprawdę poprawiłem szybkość po wyczyszczeniu katalogu ~ / .oh-my-zsh / plugins /. Było w nim wiele nieużywanych wtyczek.

pinguinjkeke
źródło
0

Dodaj następujące elementy do ~ / .zshenv

skip_global_compinit=1
FacePalm
źródło