Çok yavaş bir Emacs ile ilgili sorunları nasıl giderebilirim?


41

Bir belge yazıyorum ve Emacs'in performansının dün göründüğünü düşündüğüm performansıyla ilgili bir sorunum var. İnit dosyamda herhangi bir değişiklik yapmadım veya yeni bir paket yüklemedi.

Sorun şu ki, ben yazarken, klavyedeki harflere basmakla ekranda görünmek arasında çok göze çarpan bir gecikme var. Bazen kelimeyi yazmayı bitirdikten sonra hala ekranda baskı yapmalarını izliyorum.

Yazma hızı dışında başka sorunlar olup olmadığını bilmiyorum (sadece var olduğunu tahmin edebilirim) ama onları farketmedim.

Bu soruna ne sebep olabilir?
Emacs tarafından mı kaynaklanıyor yoksa bilgisayarımın performansından mı kaynaklanıyor? Genel olarak Emacs'ın performansını etkileyen değişkenler nelerdir?

Emac'larımın versiyonu GNU Emacs 24.3.1

Ana aktif mod:

  1. Lateks

ve küçük aktif modlar:

  1. Otomatik Tamamlama
  2. Otomatik Kompozisyon
  3. Otomatik Sıkıştırma
  4. Otomatik Şifreleme
  5. Blink-İmleç
  6. Dosya-Adı-Gölge
  7. Font-Lock
  8. Küresel-Otomatik Tamamlama
  9. Global-Yazı Kilidi Global-Hl-Line
  10. Line-Sayı
  11. Fare tekerleği
  12. Kabuk-Dirtrack
  13. Show Paren
  14. Smartparens
  15. Smartparens-Global
  16. Araç İpucu Geçici İşareti

5
C-h mana modu ve aktif olan tüm küçük modları gösterecektir. Nedenini bulana kadar her küçük modu yavaşça devre dışı bırakabilirsiniz. Büyük modun kendisi olabilir, ancak küçük modlar en olası şüphelilerdir. Hangi modları kullandığınızı belirtmeksizin, buradaki herhangi biri sorununuzla ilgili neler olup bittiğini karanlıkta bıçaklardı. Bazı özel görüntülerde ortaya çıkan nadir bir durum var - örneğin, birisi bana telefon sembolüyle veya iPhone'daki diğer özel sembollerle bir e-posta gönderdiğinde - ancak bu, özel sembollerin neden olduğu izole bir yavaşlama sorunudur.
kanun listesi

2
linum-modeBüyük tamponlarda performansı yavaşlatır. nlinum-modeStefan tarafından yazılmış daha büyük tamponlar için daha iyidir.
kanun listesi

Bilgisayarınızda neler oluyor? Ne kadar hafıza kullanılıyor? İşlemciniz ne kadar aktif ve kullanımının çoğundan hangi programlar sorumlu? Sorun başka bir program da olabilir.
Dave

2
Oh, bu referansı başka bir konuya daha yeni gönderdim: gnu.org/software/emacs/manual/html_node/elisp/Profiling.html - bu iyi bir başlangıç ​​olur. Ayrıca, karanlıkta bir çekim: font-lock'u devre dışı bırakmayı deneyin gnu.org/software/emacs/manual/html_node/emacs/Font-Lock.html - bu benim ilk şüphelim ).
wvxvw

1
Bu yorumlardaki çok sayıda öneri, bu sorunun biraz fazla belirsiz olduğunu göstermektedir. Çözüm yerine talimat isteme başlığını yeniden yazdım. Ayrıca buna göre bir cevap verdim. Lütfen bu talimatlara uyduktan sonra yeni bir soru sorun veya açık değilse bir yorum bırakın.
Malabarba

Yanıtlar:


64

Bu soruna ne neden olabilir? Emacs tarafından mı kaynaklanıyor yoksa bilgisayarımın performansından mı kaynaklanıyor? Genel olarak Emacs'ın performansını etkileyen değişkenler nelerdir?

Emacs yaklaşık 50.000 iç değişkene ve her biri birkaç düzine değişkene ortalama bir kaç bin dış pakete sahip, birisinin bunu genel anlamda yanıtlamasını bekleyemezsiniz. :-)

Bunu sadece sorunuzun altındaki yorumlar kısmına bakarak görebilirsiniz. İçinde yarım düzine farklı öneri var, hepsi eşit derecede geçerli.

Sorunu tam olarak belirlemek için ne yapabilirsiniz?

Seçenek 1: Modları devre dışı bırakın

Listelenen küçük modları devre dışı bırakmaya başlayın ve hangisinin sizi performans sorununu çözdüğünü görün. Ben başlardım smartparens, auto-complete, line-numberve font-lock, ve ardından listeyi aşağı izleyin.

"Ben dün bu sorunu yoktu" anlamına gelir çok az, buna güvenmeyin çok ağır. Bir şey çözene kadar küçük kipleri devre dışı bırakmaya başla.

Küçük modlardan hiçbiri sorununuzu çözmezse, hangi snippet'in buna neden olduğunu bulana kadar init dosyanızın bölümlerini yorumlamaya başlayın. Her durumda, daha spesifik bir şeye sahip olduğunuzda yeni bir soru sorun.

Seçenek 2: Profil oluşturucu

  1. Çağırır M-x profiler-start RET RET(ikinci RETonaylamak için cpu);
  2. Biraz yazarak, tercihen paragrafın tamamını veya daha fazlasını yapın;
  3. Çağır M-x profiler-report.

Bu size her bir fonksiyon için harcanan cpu zamanını tanımlayan bir tampon verecektir. TABBir çizgiye vurmak , içindeki işlevleri görüntülemek için genişletir. Hangi işlevin çok fazla CPU zamanı aldığını bulana kadar bu arabellekte ilerleyin.

Daha sonra ne yaparım?

Gecikmeye neden olan işlevi veya paketi veya pasajı bulduğunuzda (özel bir sıra ile değil):

  • İlgili burada yeni bir soru sorun bu özel minör-mod (ya da fonksiyon veya pasajı).
  • Paket sorumlusuna bir hatayı bildirin.
    • Paketin kaynak dosyasının üstündeki yorumları kontrol edin. Bir URL içeriyorsa (özellikle github'da), orada muhtemelen bir sorun izleyici var.
    • Bazı paketler gibi bir komut sunar M-x PACKAGE-bug-report.
    • E-postası paketin kaynak dosyasının üstünde olmalıdır.
  • Yerleşik bir paketse, bunu bildirebilirsiniz M-x report-emacs-bug.
  • Yerleşik olmayan paketler için bile, help-gnu-emacsposta listesinden yardım isteyebilirsiniz .

4
Bunlar harika talimatlar. Çok teşekkür ederim! Qusetion yorumunda söylediğim gibi, bunun belirsiz olacağını bilmiyordum. Cevabın Emacs konusunda uzman biri için (sizin birçoğunuz gibi) temel olacağını düşündüm. Her neyse, bu "rehber" harika ve sorumun buna yol açtığı için mutluyum. :)
Adam

3
Profilleyiciyi kullanmak için +100000. Aptalsanız (benim gibi) ve kazayla her arabellekteki mod satırına pahalı bir işlev çağrısı eklemek gibi bir şey yaparsanız, bunun ne olduğunu çözmenin kesin yolu budur.
Radon Rosborough 12:16

Küçük modu nasıl devre dışı bırakabilirsiniz? Etkinleştirilen küçük modlar: Async-Bytecomp-Package Otomatik Tamamlama Otomatik Kompozisyonu Otomatik Sıkıştırma Dosya Sıkıştırma Dosya Adı Gölge Flycheck Flyspell Yazı Tipi Kilidi Global-Otomatik Tamamlama Global-Otomatik Geri Dönüş Global-Eldoc Global-Flycheck Küresel-Yazı Tipi-Kilit -Türkiye-Global-Hl-Line Global-Hungry-Delete Global-Linum Line-Number Linum-Magit-Auto-Revert Org-Bullet'leri Sil Org-Girinti Geçersiz Kılma-Global Mermi Pyvenv Göster-Smartparens-Global Boyut Göstergesi Smartparens Smartparens-Global
Stryker 09.03
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.