ฉันจะแก้ไขปัญหา Emac ที่ช้ามากได้อย่างไร


41

ฉันกำลังเขียนเอกสารและฉันมีปัญหากับการทำงานของ Emacs ที่ฉันคิดว่าเพิ่งปรากฏเมื่อวานนี้ ฉันไม่ได้ทำการเปลี่ยนแปลงใด ๆ ในไฟล์ init หรือติดตั้งแพ็คเกจใหม่ใด ๆ

ปัญหาคือว่าในขณะที่ฉันกำลังเขียนมีความล่าช้าที่เห็นได้ชัดมากระหว่างการกดตัวอักษรบนแป้นพิมพ์และทำให้พวกเขาปรากฏบนหน้าจอ บางครั้งฉันดูพวกเขายังพิมพ์อยู่บนหน้าจอหลังจากพิมพ์คำเสร็จ

ฉันไม่ทราบว่ามีปัญหาอื่น ๆ ยกเว้นความเร็วในการพิมพ์ (ฉันเดาได้แค่ว่ามี) แต่ฉันไม่ได้สังเกตเห็น

สิ่งที่สามารถทำให้เกิดปัญหานี้?
มันเกิดจาก Emacs หรือเป็นเพราะประสิทธิภาพของพีซีของฉัน? โดยทั่วไปแล้วตัวแปรที่มีผลต่อประสิทธิภาพของ Emacs คืออะไร?

เวอร์ชั่นของฉัน Emacs คือ GNU Emacs 24.3.1

โหมดแอคทีฟที่สำคัญคือ:

  1. น้ำยาง

และโหมดที่ใช้งานเล็กน้อยคือ:

  1. สมบูรณ์อัตโนมัติ
  2. Auto-องค์ประกอบ
  3. Auto-การบีบอัด
  4. Auto-การเข้ารหัสลับ
  5. กะพริบตาเคอร์เซอร์
  6. ชื่อไฟล์เงา
  7. font-Lock
  8. ทั่วโลกสมบูรณ์อัตโนมัติ
  9. Global-Font-Lock Global-Hl-Line
  10. สายจำนวน
  11. เมาส์ล้อ
  12. เชลล์ Dirtrack
  13. แสดง Paren
  14. Smartparens
  15. Smartparens ทั่วโลก
  16. Tooltip Transient-Mark

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
จำนวนข้อเสนอแนะที่แท้จริงในความคิดเห็นเหล่านี้แสดงให้เห็นว่าคำถามนี้ค่อนข้างคลุมเครือเล็กน้อย ฉันได้ตั้งชื่อใหม่เพื่อขอคำแนะนำแทนที่จะเป็นวิธีแก้ปัญหา ฉันยังให้คำตอบด้วย กรุณาถามคำถามใหม่เมื่อคุณทำตามคำแนะนำเหล่านั้นหรือแสดงความคิดเห็นหากพวกเขาไม่ชัดเจน
Malabarba

คำตอบ:


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วิงวอน

ที่จะให้บัฟเฟอร์อธิบายเวลา cpu ของแต่ละฟังก์ชั่น กดปุ่มTABบนบรรทัดเพื่อขยายฟังก์ชั่นภายใน นำทางบัฟเฟอร์นี้จนกว่าคุณจะพบว่าฟังก์ชันใดใช้เวลา CPU มาก

หลังจากนั้นฉันจะทำอย่างไร

เมื่อคุณพบฟังก์ชั่นหรือแพคเกจหรือตัวอย่างที่ทำให้เกิดความล่าช้าคุณสามารถ (ในลำดับใดไม่):

  • ถามคำถามใหม่ที่นี่เกี่ยวกับโหมดย่อยที่เฉพาะเจาะจง (หรือฟังก์ชั่นหรือตัวอย่าง)
  • รายงานข้อผิดพลาดไปยังผู้ดูแลแพ็คเกจ
    • ตรวจสอบความคิดเห็นที่ด้านบนของไฟล์ต้นฉบับของแพ็คเกจ หากมี URL (เป็นพิเศษใน GitHub) อาจมีการติดตามปัญหาที่นั่น
    • M-x PACKAGE-bug-reportแพคเกจบางแห่งมีคำสั่งเช่น
    • อีเมลของเขาหรือเธอควรอยู่ด้านบนสุดของไฟล์ต้นฉบับของแพ็คเกจ
  • M-x report-emacs-bugถ้ามันในตัวแพคเกจที่คุณสามารถรายงานด้วย
  • แม้สำหรับแพ็คเกจที่ไม่ได้มีมาให้คุณสามารถขอความช่วยเหลือได้จากhelp-gnu-emacsรายชื่อผู้รับจดหมาย

4
เหล่านี้เป็นคำแนะนำที่ดี ขอบคุณมาก! ตามที่ฉันได้กล่าวไว้ในความคิดเห็นของ qusetion ของฉันฉันไม่ทราบว่ามันจะคลุมเครือ ฉันคิดว่าคำตอบจะเป็นระดับเบื้องต้นสำหรับผู้เชี่ยวชาญใน Emacs (เหมือนกับที่คุณหลายคน) อย่างไรก็ตาม "คำแนะนำ" นี้ยอดเยี่ยมและฉันมีความสุขที่คำถามของฉันนำไปสู่ :)
Adam

3
+100000 สำหรับการใช้ profiler หากคุณโง่ (เช่นฉัน) และทำบางอย่างโดยบังเอิญเช่นเพิ่มฟังก์ชั่นการโทรที่มีราคาแพงไปยังบรรทัดโหมดในบัฟเฟอร์ทุกอันนี่เป็นวิธีที่จะเข้าใจว่าเกิดอะไรขึ้น
Radon Rosborough

คุณจะปิดการใช้งานโหมดรองได้อย่างไร? โหมดย่อยที่เปิดใช้งาน: Async-Bytecomp-Package Auto-Composition อัตโนมัติการบีบอัดไฟล์อัตโนมัติชื่อ - เงา - Flycheck เงา Flyspell Font-Lock Global-Auto-Global สมบูรณ์แบบอัตโนมัติ - ย้อนกลับทั่วโลก 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 - Projectile Pyvenv ล่าสุดของ Save-Place Shell-Dirtrack Show-Paren Show-Paren Show-Smartparens- Global-Indication ขนาด Smartparens Smartparens-Global
Stryker
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.