2012-10-07 2 views
44

Недавно я начал использовать Zsh, и это потрясающе. К сожалению, для проекта я считаю свой «основной» проект, все идет медленно. Я имею в виду, что каждый раз, когда я запускаю команду - например, ls - между временем выполнения команды и временем, которое я могу использовать терминал, между задержкой и пятью секундами.oh-my-zsh slow, но только для определенного Git repo

Что может быть отличным в этом репо, что делает Zsh настолько медленным? Я предполагаю, что это специфичная для Zsh вещь, потому что не было никаких проблем, прежде чем я начал использовать Zsh. Я пробовал делать git clean, но он не делал заметных различий.

Я нахожусь в Mac OS X, если это имеет значение.

Update: Оказывается, эта линия моего .zshenv является то, что делал это медленно:

[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # Load RVM function 

Если я комментирую эту линию, она идет от взятия около 3 секунд, чтобы принимать около 1 секунду. К сожалению, мне нужна эта линия, так как многие из моих проектов используют RVM. Я не знаю, что делать сейчас.

Обновление 2: это, по-видимому, особенность oh-my-zsh. Если я не загружаю ~/.oh-my-zsh/oh-my-zsh.sh, у меня нет проблем.

+1

, и если вы используете bash сейчас, это все еще медленно? – nneonneo

+0

Отличный вопрос. Нет, это быстро на bash. –

+0

Неужели все еще медленно, если вы перемещаете файлы '~/.z *' в сторону? – user4815162342

ответ

5

я, наконец, понял это. Мой проект имел папку rake с тонны файлов (например, 20 000). Я понятия не имею, для чего была эта папка, но я удалил ее, Zsh уже не работает медленнее, и мое приложение все еще работает.

+0

Интересная обратная связь (точнее моего ответа) +1 – VonC

+3

И мне потребовалось всего 4 месяца, чтобы понять! –

+0

Я нахожу это быстро! Я знаю тех, кто принимает несколько лет *;) http://meta.stackexchange.com/questions/36318/whats-the-longest-interval-between-an-answer-being-posted-and-accepted#comment469716_36318 – VonC

10

Существует несколько способов ускорить работу oh-my-zsh, как описано в «zsh starts incredibly slowly», очистка секции плагина.

Например, сообщение в блоге «Fix for oh-my-zsh git-svn prompt slowness» упоминает функцию parse_git_dirty как потенциальную проблему.

+0

Этот материал помог мне в том, что он заставил меня начать комментировать вещи, чтобы увидеть, что может заставить вещи загружаться быстрее. Я сузил проблему и уточнил свой вопрос. –

+0

Это решает мою проблему. – LittleSweet

+0

Сообщение compinit улучшило небольшое количество для меня, но удаление parse_git_dirty действительно ускорило ситуацию. Благодарю. – Raj

7

Это может быть тема, вызывающая git и rvm после каждой команды.

Для меня изменение ZSH_THEME="juanghurtadoto" на ZSH_THEME="miloshadzic" удалено с задержкой на 2 секунды после каждой команды.

Темы могут быть найдены на https://github.com/robbyrussell/oh-my-zsh/wiki/themes

+0

Интересно. +1. Это более конкретный, чем мой ответ. – VonC

78

Вы можете добавить к вашей мерзавца конфигурации и ЗШ не будет проверять состояние больше

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

Подробный ответ: Есть две центральные функции ЖКТ (в git_prompt_info() и parse_git_dirty()) в lib/git.zsh. Каждый метод имеет переключатель мерзавец конфигурации, чтобы отключить его (о-мой-zsh.hide-статус и о-мой-zsh.hide грязный)

Некоторые темы создают свои собственные запросы GIT, а иногда ignore these flags.

+1

Является ли это все еще так? Просто испытал и не работал для меня .... – cevaris

+0

Ничего, я использую 'zsh-git-prompt' – cevaris

+0

используйте команду в нужную папку :) –

6

Oh_my_zsh кажется медленным для некоторых репозиций, где он проверяет состояние репо после каждой команды. Это поведение можно переопределить в новой версии .oh_my_zsh. Просто расторгните следующую строку.zshrc:

DISABLE_UNTRACKED_FILES_DIRTY = "истинный"

После этого перезагрузите терминал или выполните следующее:

источник ~/.zshrc

+0

' git config --add oh-my-zsh.hide-status 1' ускоряет работу, но полностью удаляет статус zsh для VCS. Это держит его и все еще ускоряет его. – nyxz

5

Для меня это медленный на VirtualBox (гость), потому что я использую синхронизированную папку. Я все еще хочу, чтобы он был включен на OS X (хост), где он достаточно быстр. Вместо того, чтобы использовать локальную настройку конфигурации, которая хранится с репо и изменит его как на гостя и хозяина, я использую настройки только на гостя глобальной конфигурации:

git config --global --add oh-my-zsh.hide-dirty 1 

Если я хочу это только для одного Сделки рЕПО:

git config --add oh-my-zsh.hide-dirty 1 
-4

Вероятно, самый простой и надежный обходной путь, который я мог придумать было просто ввести

bash 

Я сделал это в каталоге с моим огромным хранилище мерзавца и е все работает отлично.

1

Если вы не заботитесь о других программ, но git контроля версий, вы можете просто отключить все vcs_info с в вашем *.zsh-theme и заменить их с носителями git команд.

Например, я настроить мой agnoster.zsh-theme по:

  1. комментарий/удалить все строки, которые имеют vcs_info,
  2. редактировать код в prompt_git() функции от:

    ref="$vcs_info_msg_0_" в

    ref="$(git branch 2>/dev/null | grep -Po '(?<=\*).*$')"

Итак, в основном, я просто отключил все действия vcs_info и вместо этого использовал собственную команду git для проверки статусов репо. В результате я все еще могу видеть свою полезную подсказку git со скоростью так же быстро, как работа в директории, отличной от git. С помощью этой небольшой модификации мой zsh может работать на 4-5 раз быстрее в git-репозиториях.

Примечание: используйте GNU grep not BSD grep.