Zsh начинается невероятно медленно

63

ZSH занимает около полутора секунд от создания нового окна терминала до готовности. Я уверен , что преступник compinit.

Я не смог найти хорошую документацию, compinit,но похоже, что она должна кэшировать все необходимые вещи в каком-то файле, как .zcompdump.

Какие-нибудь хитрости по ускорению?

Eli
источник

Ответы:

33

oh-my-zshпотребовалось около 1,5 секунд для запуска на моем ноутбуке. Я записал некоторые шаги, которые я предпринял, чтобы снизить это примерно до 0,25 секунды .

Другая добрая душа суммировала шаги, необходимые для интеграции моих изменений в вашу копию oh-my-zsh.

Самая большая проблема заключается в том, что вызывается compinitцелая куча лишних раз вместо одного раза после полного определения fpath. Я внес эти изменения в мою ветку oh-my-zshна github. Изменения были обсуждены на GitHub, и они, кажется, работают хорошо для нескольких человек. Надеемся, что изменения будут объединены в oh-my-zshближайшее время.

Пэт Риган
источник
4
Для будущих читателей, я считаю, что все эти изменения были объединены вверх по течению.
Майкл Миор
1
Изменения могли быть перенесены в апстрим, но удаление Git из плагинов помогло мне существенно.
kylehotchkiss
25

Хотя у ZSH есть своя собственная доля замедлений, если вы обнаружите, что окно терминала пустое за несколько секунд до того, как вы увидите Last Login:строку, вам нужно будет очистить файлы журнала, чтобы увидеть улучшения скорости. Это все еще проблема для OSX Lion, и ее нужно будет делать каждые несколько месяцев. Хром, я знаю.

Команда:

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

Конечно, вам нужно прочитать эту статью заранее, чтобы вы точно знали, что происходит, потому что sudo rmнужно подумать о запуске всего, что говорит . Я поместил это здесь только потому, что использование ZSH подтверждает вашу компетентность в командной строке для запуска.

kylehotchkiss
источник
1
Спасибо, такое простое решение для чего-то, что мучило меня так долго!
декан
7
Я бы порекомендовал не использовать, -rтак как нет каталогов, и это не нужно. Отказ от этого приводит к меньшему количеству слез, если кто-то печатает sudo rm -rf / private/var/log/asl*.asl(пробел перед личным) по ошибке.
декан
1
Или еще более надежной, а cd /private/var/log/aslзатем rm -f *.asl. Также, к сведению, этот ответ спас меня от времени запуска, которое приближалось к 10 секундам, большое спасибо!
Гаррет диско
1
Работал на меня! Кстати trash /private/var/log/asl*.asl. trashнужно будет установить, конечно. brew install trash
Майк Д
12

Мое самое большое улучшение - это удаление элементов из раздела плагинов = (). Плагины «github» и «brew» загружаются очень медленно.

Я также удалил концентратор, к которому я подключился, gitи это также ускорило запрос.

Я использовал '/ usr / bin / time zsh -i -c exit' для записи времени запуска, однако compinit, похоже, для меня это не имеет большого значения.

Было бы здорово услышать, что другие делают, чтобы ускорить это.

xer0x
источник
1
Удаление githubи brewплагины решили мою проблему немедленно.
Питер Нидервизер
gitи brewплагины очень важны для меня. Удаление rubyплагина решило мою проблему. Благодарю.
Иван З. Г. Сяо
6

Вы используете предустановленный /bin/zshили другой? Я спрашиваю, потому что zsh, который я установил через fink, запускается ужасно медленно из-за включения шаблонов zsh , в то время как vanilla запускается прямо сейчас.

Делает ли запуск с явным dumpfile ( compinit -d dumpfile) быстрее? На странице руководства говорится, что

Следующий вызов compinit будет читать дамп-файл вместо полной инициализации.

Joey1978
источник
2
Я использую Oh My Zsh (который, я считаю, использует по умолчанию / bin / zsh). Когда я отключаю загрузку всех плагинов Oh My Zsh и еще много чего, он загружается очень быстро, но я думаю, что в этом случае compinitон никогда не вызывается. Когда я звоню вручную, compinitэто занимает немного времени. Может быть, это просто потому, что Oh My Zsh добавляет так много привязок в compinit?
Эли
5

Теперь oh-my-zsh проверяет специальный параметр конфигурации git oh-my-zsh.hide-status перед запросом статуса. Так беги

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

на проблемном хранилище.

Артем Тихомиров
источник
для меня я должен был отключить плагин git в .zshrc. Я в настоящее время сталкиваюсь с проблемами с медленным интернет-ответом, который сделал zsh медленным
Paschalis
5

Zsh сам по себе запускается примерно за 0,1 секунды, что вполне достаточно. Я только что заметил, когда приблизился к отметке истории команд 50 000, что для загрузки первой подсказки стало более 3 секунд.

Я не знаю, как вы, ребята, находите все эти другие причины для медленного запуска, но моя была именно тем, о чем я догадывался. Я сделал a mv ~/.zsh_history zsh_history_backupи bam, 3-секундный запуск теперь 0,1-секундный запуск. Любопытно, что /usr/bin/time /bin/zsh -i -c exitне удается захватить время, необходимое для загрузки в истории.

Если в вашей истории zsh нет десятков тысяч команд, то это не так. Мой ~/.zsh_historyизмеренный 1.8MB. Очень возможно случайно вставить большой кусок материала в качестве команды в терминал, это также приведет к быстрому переполнению истории (хотя этого следует избегать, поскольку это, очевидно, может быть чрезвычайно разрушительным).

Стивен Лу
источник
Это ответ. Если с oh-my-zsh не было ничего необычного (много плагинов и надстроек), то я гарантирую, что это из-за журнала истории. Изменение является немедленным.
Себастьянсо
2

Я использовал тему "аф-магии"

Переход на «музу» решил проблему.

Отредактируйте ~ / .zshrc и измените эту строку:

#ZSH_THEME="random"
#ZSH_THEME="af-magic"
ZSH_THEME="muse"
Mika
источник
спасибо за ответ, я обнаружил, что переход от аф-магии к чему-то другому решил эту проблему. Интересно, что восстановление афганской магии все еще прекрасно работает. не уверен, что происходило под капотом.
сарат
0

У меня действительно большие улучшения скорости после очистки каталога ~ / .oh-my-zsh / plugins /. В нем было много неиспользуемых плагинов.

pinguinjkeke
источник
0

Добавьте следующее в ваш ~ / .zshenv

skip_global_compinit=1
FACEPALM
источник