Я пишу документ, и у меня есть проблема с производительностью Emacs, которая, как мне кажется, появилась только вчера. Я не сделал никаких изменений в моем файле инициализации или установил новые пакеты.
Проблема в том, что, когда я пишу, существует очень заметная задержка между нажатием букв на клавиатуре и отображением их на экране. Иногда я наблюдаю, как они все еще печатают на экране после того, как я закончил набирать слово.
Я не знаю, есть ли другие проблемы, кроме скорости печати (я могу только догадываться, что они есть), но я их не заметил.
Что может вызвать эту проблему?
Это связано с Emacs или с производительностью моего компьютера? Каковы переменные, влияющие на производительность Emacs?
Моя версия Emacs - это GNU Emacs 24.3.1
Основной активный режим:
- Латекс
и второстепенные активные режимы:
- Auto-Complete
- Авто-композиция
- Автоматическое сжатие
- Авто-шифрование
- Blink-курсор
- Файл-имя-Shadow
- Font-Lock
- Global-Auto-Complete
- Global-Font-Lock Global-Hl-Line
- Номер строчки
- Колесико мыши
- Shell-Dirtrack
- Шоу-Paren
- Smartparens
- Smartparens-Global
- Подсказка Transient-Mark
источник
C-h m
покажет основной режим и все второстепенные режимы, которые активны. Вы можете медленно отключать каждый второстепенный режим, пока не найдете причину. Это может быть основной режим, но второстепенные режимы являются наиболее вероятными подозреваемыми. Без указания того, какие режимы вы используете, кто-нибудь здесь будет просто в темноте нанести удар по тому, что происходит с вашей проблемой. У меня есть редкая ситуация, которая возникает с некоторыми специальными изображениями - например, когда кто-то отправляет мне электронное письмо с символом телефона или другими специальными символами в iPhone - но это отдельная проблема замедления, вызванная специальными символами.linum-mode
замедляет производительность в больших буферах.nlinum-mode
написанный Стефаном лучше для больших буферов.Ответы:
Emacs имеет около 50 000 внутренних переменных и несколько тысяч внешних пакетов, усредненных по нескольким дюжинам переменных в каждой. Вы не можете ожидать, что кто-то ответит на это в общем смысле. :-)
Вы можете увидеть это, просто взглянув на ветку комментариев под своим вопросом. Там есть полдюжины разных предложений, все одинаково действительны.
Что вы можете сделать, чтобы точно определить проблему?
Вариант 1: отключить режимы
Начните отключать те второстепенные режимы, которые вы перечислили, и посмотрите, какой из них решает проблему с производительностью. Я хотел бы начать с
smartparens
,auto-complete
,line-number
иfont-lock
, а затем следуют вниз по списку.«У меня не было этой проблемы вчера» означает очень мало, не полагайтесь на это слишком сильно. Просто начните отключать второстепенные режимы, пока что-то не решит.
Если ни один из второстепенных режимов не устранил вашу проблему, то начните комментировать части вашего файла инициализации, пока не выясните, какой фрагмент вызвал это. В любом случае, задавайте новый вопрос, когда у вас есть что-то более конкретное.
Вариант 2: профилировщик
M-x profiler-start RET RET
(второеRET
подтверждениеcpu
);M-x profiler-report
.Это даст вам буфер, описывающий время процессора для каждой функции. Нажатие
TAB
на строку расширяет ее для отображения функций внутри нее. Перемещайтесь по этому буферу, пока не выясните, какая функция отнимает так много времени процессора.Что мне делать потом?
Как только вы найдете функцию, пакет или фрагмент, вызывающий задержку, вы можете (без определенного порядка):
M-x PACKAGE-bug-report
.M-x report-emacs-bug
.help-gnu-emacs
список рассылки.источник