zsh починається неймовірно повільно


63

ZSH займає близько секунди з половиною від створення нового вікна терміналу до готовності. Я майже впевнений, що винуватець є compinit.

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

Якісь хитрощі щодо його прискорення?

Відповіді:


33

oh-my-zshна запуск мого ноутбука було потрібно 1,5 секунди. Я написав кілька кроків, які я вжив, щоб досягти цього приблизно на 0,25 секунди .

Ще одна добра душа підсумувала кроки, необхідні для інтеграції моїх змін у вашу копію о-о-мі-шш.

Найбільша проблема полягає в тому, compinitщо називали цілу купу додаткових разів замість лише одного разу після того, як fpath був повністю визначений. Ці зміни я змінив на своїй гілці oh-my-zshGithub. Про зміни обговорили на 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 доводить вашу компетентність з командного рядка для початку.


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" і "варити" дуже повільно завантажуються.

Я також видалив концентратор, який я відчув, gitі це також швидко прискорило.

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

Було б чудово почути, що роблять інші, щоб прискорити це.


1
Видалення githubта brewплагіни вирішили мою проблему негайно.
Пітер Нідервайзер

gitі brewплагіни для мене досить важливі. Видаливши rubyплагін вирішив мою проблему. Дякую.
Іван ЗГ Сяо

6

Використовуєте ви попередньо встановлений /bin/zshчи інший? Я запитую, бо zsh, який я встановив через фінка, починається страшенно повільно через включення шаблонів zsh , тоді як ваніль запускається вгору.

Чи працює з явним dumpfile ( compinit -d dumpfile) швидше? Сторінка man говорить про це

Наступним викликом compinit буде прочитаний скинутий файл замість повного ініціалізації.


2
Я використовую Oh My Zsh (який, на мою думку, використовує типовий / bin / zsh). Коли я відключаю завантажувати всі плагіни Oh My Zsh і багато чого іншого, він завантажується дуже швидко, але я думаю, що в цьому випадку compinitніколи не викликається. Коли я вручну дзвоню, compinitце займає небагато часу. Можливо, це просто тому, що Oh My Zsh додає так багато прив’язок до компенсації?
Елі

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 секунди для мене, що досить добре. Щойно я помітив, як підступив до позначки історії 500 команд, що для завантаження першого підказки стало більше 3 секунд.

Я не знаю, як ви, хлопці, знаходите всі ці інші причини для повільного запуску, але моя була саме такою, якою була моя перша здогадка. Я зробив mv ~/.zsh_history zsh_history_backupі бам, 3 секунди запуску зараз 0,1 секунди запуску. Цікаво, що /usr/bin/time /bin/zsh -i -c exitне вдалося зафіксувати час, необхідний для завантаження в історію.

Якщо у вас в історії zsh немає десятків тисяч команд, то це не все. Мій ~/.zsh_historyвимірюваний 1,8 Мб. Це дуже можливо випадково вставити великий фрагмент речей як команду в термінал, це також швидко підірве історію (хоча це дуже багато, щоб уникнути цього, оскільки це, очевидно, може бути надзвичайно руйнівним).


Це відповідь. Якщо ви не зробили нічого фантазійного (багато плагінів та аддонів) з oh-my-zsh, я гарантую, що це через журнал історії. Зміна негайна.
Себастіалонсо

2

Я використовував тему "аф-магія"

Перехід на "музу" вирішив проблему.

Відредагуйте ~ / .zshrc та змініть цей рядок:

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

дякую за відповідь, я виявив, що перехід від аф-магії до чогось іншого вирішив проблему. Цікаво відновити аф-магію, як і раніше, чудово працює. не впевнений, що тривало під капотом.
сарат

0

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


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.