Як я можу вирішити дуже повільний Emacs?


41

Я пишу документ і у мене є проблема з роботою Emacs, яка, на мою думку, з’явилася лише вчора. Я не робив жодних змін у своєму файлі init та не встановлював жодних нових пакетів.

Проблема полягає в тому, що, поки я пишу, є дуже помітний відставання між натисканням букв на клавіатурі і тим, щоб вони з'являлися на екрані. Іноді я спостерігаю, як вони все ще друкуються на екрані після того, як я закінчив вводити слово.

Я не знаю, чи є інші проблеми, крім швидкості набору тексту (я можу лише здогадуватися, що вони є), але я їх не помітив.

Що може викликати цю проблему?
Це викликано Emacs або це пов'язано з продуктивністю мого ПК? Взагалі, які змінні впливають на продуктивність Emacs?

Версія мого Emacs - це GNU Emacs 24.3.1

Основний активний режим:

  1. LaTeX

і незначними активними режимами є:

  1. Автозаповнення
  2. Авто-композиція
  3. Автоматичне стиснення
  4. Авто-шифрування
  5. Блимає курсор
  6. Файл-Ім'я-Тінь
  7. Блокування шрифту
  8. Global-Auto-Complete
  9. Global-Font-Lock Global-Hl-Line
  10. Рядок-номер
  11. Колесо миші
  12. Shell-Dirtrack
  13. Шоу-батьків
  14. Smartparens
  15. Smartparens-Global
  16. Підказка про перехідну позначку

5
C-h mвідкриє основний режим та всі активні режими другорядного режиму. Ви можете повільно відключити кожен другорядний режим, поки не з’ясуєте причину. Це міг бути самим основним режимом, але мінорні режими - найімовірніші підозрювані. Не вказуючи, які режими ви використовуєте, хтось тут буде просто колоти в темряві, що відбувається з вашою проблемою. У мене є рідкісна ситуація, яка трапляється з деякими спеціальними зображеннями - наприклад, коли хтось надсилає мені щось із телефоном або іншими спеціальними символами в iPhone - але це ізольована проблема сповільнення, спричинена спеціальними символами.
законник

2
linum-modeуповільнює продуктивність у великих буферах. nlinum-modeнаписаний Стефаном, краще для більших буферів.
законник

Що відбувається на вашому комп’ютері? Скільки пам'яті використовується? Наскільки активно працює ваш процесор і які програми відповідають за більшість його використання? Проблемою цілком може бути якась інша програма.
Дейв

2
О, я щойно опублікував це посилання в іншій темі: gnu.org/software/emacs/manual/html_node/elisp/Profiling.html - це було б вдалим початком. Також знімок у темряві: спробуйте вимкнути блокування шрифту gnu.org/software/emacs/manual/html_node/emacs/Font-Lock.html - це мій перший звичайний підозрюваний (який часто виправдано займає більшість циклів процесора ).
wvxvw

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

Відповіді:


64

Що може викликати цю проблему? Це викликано Emacs або це пов'язано з продуктивністю мого ПК? Взагалі, які змінні впливають на продуктивність Emacs?

Emacs має близько 50 000 внутрішніх змінних і кілька тисяч зовнішніх пакетів, що в середньому по кілька десятків змінних кожна, ви не можете очікувати, що хтось відповість на це в загальному сенсі. :-)

Це ви можете побачити, просто подивившись на нитку коментарів під вашим запитанням. Там є півдесятка різних пропозицій, всі однаково справедливі.

Що ви можете зробити, щоб визначити проблему?

Варіант 1: Вимкнути режими

Почніть відключати ті незначні режими, які ви перерахували, і подивіться, який з них вирішує проблему з продуктивністю. Я хотів би почати з smartparens, auto-complete, line-numberі font-lock, а потім слідують вниз по списку.

"У мене вчора не було цієї проблеми" означає дуже мало, не покладайтеся на неї занадто сильно. Просто починайте вимикати незначні режими, поки щось не вирішить.

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

Варіант 2: Профілер

  1. Викликати M-x profiler-start RET RET(друге RETпідтвердити cpu);
  2. Введіть текст, бажано, цілий абзац або більше;
  3. Викликати M-x profiler-report.

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

Що робити після цього?

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

  • Задайте тут нове запитання щодо конкретного другорядного режиму (або функції чи фрагмента).
  • Повідомте про помилку у сервісного сервера.
    • Перевірте коментарі у верхній частині вихідного файлу пакета. Якщо вона містить URL-адресу (спеціально на github), там, ймовірно, відстежувач проблем.
    • Деякі пакети пропонують таку команду, як M-x PACKAGE-bug-report.
    • Його електронна адреса повинна знаходитись у верхній частині вихідного файлу пакета.
  • Якщо це вбудований пакет, ви можете повідомити про це M-x report-emacs-bug.
  • Навіть для пакетів, які не є вбудованими, ви можете звернутися за допомогою до help-gnu-emacsсписку розсилки.

4
Це чудові інструкції. Дуже дякую! Як я вже говорив у коментарях моєї допиту, я не знав, що це буде неясно. Я думав, що відповідь буде елементарною для когось із експертів з Emacs (як і багатьох з вас). У будь-якому випадку цей "посібник" чудовий, і я радий, що моє запитання веде до цього. :)
Адам

3
+100000 для використання профілера. Якщо ви нерозумні (як я) і випадково робите щось на кшталт додавання дорогого виклику функції до рядка режиму у кожному буфері, це точно спосіб зрозуміти, що відбувається.
Радон Росборо

Як вимкнути неповнолітній режим? Увімкнено незначні режими: Async-Bytecomp-Package Auto-Complete Auto-Composition Auto-Compression File-Name-Shadow Flycheck Flyspell Font-Lock Global-Auto-Complete Global-Auto-Revert Global-Eldoc Global-Flycheck Global-Font-Lock Global -Git-Commit Global-Hl-Line Global-Hungry-Delete Global-Linum Line-Number Linum Magit-Auto-Revert Org-Bullets Org-Indent Override-Global Projectile Pyvenv Recentf Save-Place Shell-Dirtrack Show-Paren Show-Smartparens Show-Smartparens-Global Індикація розміру Smartparens Smartparens-Global
Stryker
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.