Comment puis-je dépanner un Emacs très lent?

42

J'écris un document et j'ai un problème avec les performances d'Emacs qui, je pense, est apparu hier. Je n'ai apporté aucune modification à mon fichier init ni installé de nouveaux packages.

Le problème est que pendant que j'écris, il y a un décalage très important entre le fait d'appuyer sur les lettres du clavier et de les afficher à l'écran. Parfois, je les regarde imprimer encore à l'écran après avoir fini de taper le mot.

Je ne sais pas s'il existe d'autres problèmes que la vitesse de frappe (je ne peux que supposer qu'il y en a), mais je ne les ai pas remarqués.

Qu'est-ce qui peut causer ce problème?
Est-ce dû à Emacs ou aux performances de mon ordinateur? De manière générale, quelles sont les variables qui affectent les performances d'Emacs?

La version de mon Emacs est GNU Emacs 24.3.1

Le principal mode actif est:

  1. Latex

et les modes actifs mineurs sont:

  1. Remplissage automatique
  2. Composition automatique
  3. Compression automatique
  4. Cryptage automatique
  5. Curseur Blink
  6. Nom du fichier - Ombre
  7. Verrouillage de la police
  8. Global-Auto-Complete
  9. Global-Font-Lock Ligne Global-Hl
  10. Numéro de ligne
  11. Roulette de la souris
  12. Shell-Dirtrack
  13. Show-Paren
  14. Smartparens
  15. Smartparens-Global
  16. Info-bulle transitoire
Adam
la source
5
C-h mrévélera le mode majeur et tous les modes mineurs actifs. Vous pouvez désactiver lentement chaque mode mineur jusqu'à ce que vous en trouviez la cause. Ce pourrait être le mode majeur lui-même, mais les modes mineurs sont les suspects les plus probables. Sans spécifier les modes que vous utilisez, tout le monde ici serait juste en train de poignarder dans le noir à propos de votre problème. Il existe une situation rare qui se produit avec des images spéciales - par exemple, lorsque quelqu'un m'envoie par courrier électronique quelque chose avec un symbole de téléphone ou d'autres symboles spéciaux sur l'iPhone - mais il s'agit d'un problème de ralentissement isolé causé par des symboles spéciaux.
lawlist
2
linum-moderalentit les performances dans les grands tampons. nlinum-modeécrit par Stefan est préférable pour les grands tampons.
lawlist
Que se passe-t-il sur votre ordinateur? Combien de mémoire est utilisée? Dans quelle mesure votre unité centrale est-elle active et quels programmes sont responsables de la plupart de ses utilisations? Le problème pourrait bien être un autre programme.
Dave
2
Oh, je viens de poster cette référence dans un autre fil de discussion: gnu.org/software/emacs/manual/html_node/elisp/Profiling.html - ce serait un bon début. Essayez également de désactiver font-lock gnu.org/software/emacs/manual/html_node/emacs/Font-Lock.html - c'est mon premier suspect habituel (qui prend souvent à juste titre la plupart des cycles de la CPU) )
wvxvw
1
Le nombre de suggestions contenues dans ces commentaires montre que cette question est un peu trop vague. J'ai reformulé le titre pour demander des instructions, au lieu d'une solution. J'ai également fourni une réponse en conséquence. Veuillez poser une nouvelle question une fois que vous avez suivi ces instructions ou laissez un commentaire s’ils n’étaient pas clairs.
Malabarba

Réponses:

65

Qu'est-ce qui peut causer ce problème? Est-ce dû à Emacs ou aux performances de mon ordinateur? De manière générale, quelles sont les variables qui affectent les performances d'Emacs?

Emacs contient environ 50 000 variables internes et quelques milliers de packages externes, avec une moyenne de quelques dizaines de variables chacune. Vous ne pouvez pas vous attendre à ce que quelqu'un réponde à cette question de manière générale. :-)

Vous pouvez voir cela simplement en regardant le fil de commentaires sous votre question. Il y a une demi-douzaine de suggestions différentes, toutes également valables.

Que pouvez-vous faire pour identifier le problème?

Option 1: modes de désactivation

Commencez à désactiver les modes mineurs que vous avez énumérés et voyez lequel de ces problèmes résout vos problèmes de performances. Je commencerais avec smartparens, auto-complete, line-numberet font-lock, puis suivez la liste.

"Je n'avais pas ce problème hier" signifie très peu, ne comptez pas trop dessus . Commencez simplement à désactiver les modes mineurs jusqu'à ce que quelque chose le résolve.

Si aucun des modes mineurs ne résout votre problème, commencez à commenter des parties de votre fichier init jusqu'à ce que vous trouviez l'extrait qui l'a causé. Dans tous les cas, posez une nouvelle question lorsque vous avez quelque chose de plus spécifique.

Option 2: le profileur

  1. Invoke M-x profiler-start RET RET(le second RETest à confirmer cpu);
  2. Faites un peu de frappe, de préférence un paragraphe entier ou plus;
  3. Invoquer M-x profiler-report.

Cela vous donnera un tampon décrivant le temps CPU pris par chaque fonction. Frapper TABsur une ligne la développe pour afficher les fonctions qu’elle contient. Naviguez dans cette mémoire tampon jusqu'à ce que vous trouviez quelle fonction prend le plus de temps processeur.

Qu'est-ce que je fais après?

Une fois que vous avez trouvé la fonction, le package ou l'extrait de code qui cause un décalage, vous pouvez (sans ordre particulier):

  • Posez une nouvelle question ici concernant ce mode mineur (ou cette fonction ou cet extrait de code).
  • Signaler un bogue au mainteneur du paquet.
    • Vérifiez les commentaires en haut du fichier source du paquet. Si elle contient une URL (spécialement sur github), il y a probablement un outil de suivi des problèmes.
    • Certains paquets offrent une commande comme M-x PACKAGE-bug-report.
    • Son courrier électronique doit figurer en haut du fichier source du paquet.
  • S'il s'agit d'un package intégré, vous pouvez le signaler avec M-x report-emacs-bug.
  • Même pour les paquets qui ne sont pas intégrés, vous pouvez demander de l’aide sur la help-gnu-emacsliste de diffusion.
Malabarba
la source
4
Ce sont d'excellentes instructions. Merci beaucoup! Comme je l'ai dit dans les commentaires de ma question, je ne savais pas que cela allait être vague. Je pensais que la réponse serait élémentaire pour un expert sur Emacs (comme beaucoup d’entre vous). Quoi qu'il en soit, ce "guide" est formidable et je suis heureux que ma question conduise à cela. :)
Adam
3
+100000 pour utiliser le profileur. Si vous êtes idiot (comme moi) et faites accidentellement quelque chose comme ajouter un appel de fonction onéreux à la ligne de mode dans chaque mémoire tampon, c'est certainement le moyen de comprendre ce qui se passe.
Radon Rosborough
Comment désactiver le mode mineur? Modes secondaires activés: Async-Bytecomp-Package Composition automatique auto-complète Compression automatique Nom-fichier-Ombre Flycheck Flyspell Police-Verrouillage global-Auto-complet Global-retour automatique Global-Eldoc Global-Flycheck Global-Police-Lock Global -Git-Commit Global-Hl-Line Global-Hungry-Delete Global-Linum Numéro-de-ligne Linum Magit-Auto-Revert Org-Bullets Déviation de Org-Indent-Global Projectile Pyvenv Show-Smartparens-Global Indication de taille Smartparens Smartparens-Global
Stryker