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.