TL; DRฉันมีแพคเกจจำนวนมากเช่นนี้ซึ่งทำให้เจ็บเวลาเริ่มต้นของฉัน หากคุณไม่เชื่อว่าเป็นเช่นนั้นอ่านต่อ
เวลาเริ่มต้น Emacs ของฉันค่อนข้างเล็ก ฉันไม่ได้ใช้use-package
ฉันเพิ่งตั้ง hooks และautoload
s หลาย ๆ ตัวเพื่อให้โค้ดเกือบทั้งหมดถูกเลื่อนออกไป ในความเป็นจริงสิ่งต่าง ๆ ถูกโหลดโดยปกติแล้วจะน้อยกว่าครึ่งวินาทีแม้ว่ามันจะดูเหมือนเป็นบ้าก็ตาม
แต่เมื่อเวลาผ่านไปผมสังเกตเห็นว่าเวลาเริ่มต้นของฉันได้รับพิถีพิถันช้าลงอย่างลึกลับ สิ่งนี้ได้มาถึงจุดที่เวลาเริ่มต้นคือ≥ 1 วินาที ในที่สุดฉันก็มีเพียงพอและขุดลงไปในรากของปัญหา ในที่สุดฉันก็แสดงความคิดเห็น~/.emacs
ไฟล์ทั้งหมดของฉันและพบว่าเวลาเริ่มต้นยังคงเป็น≥ 1 วินาที อันที่จริงแล้วมันก็แค่โกนออก ~ 0.2
วินาทีบางครั้งก็น้อยลง จากนั้นฉันลองemacs -q
และพบว่าเวลาเริ่มต้นคือ ~ 0.1
วินาที
จากการตรวจสอบในส่วนของคู่มือ Elisp นี้ฉันพบว่าทำไมemacs -q
ลดเวลาในการเริ่มต้นให้มาก เห็นได้ชัดว่าemacs -q
หยุด Emacs จากการทำสามสิ่งเมื่อเริ่มต้น:
- โหลดไฟล์ init ของคุณ
- กำลังโหลด
default.el
ไฟล์ของคุณ - โทร
package-initialize
เราได้ตัดออกไฟล์ init ของฉันแล้วเนื่องจากการแสดงความคิดเห็นทั้งหมดของฉัน~/.emacs
ไม่ได้ทำอะไรเลย ฉันไม่ได้ใช้default.el
ไฟล์เพื่อตัดออกไป ซึ่งปล่อยpackage-initialize
ให้เป็นผู้กระทำความผิดสำหรับการแสดงยอดฮิต
เหตุใดจึงpackage-initialize
ต้องสละเวลาเริ่มต้นมาก นั่นเป็นคำถามแรกที่ฉันถามตัวเอง ฉันไม่ได้โหลดทุกอย่างอัตโนมัติหรือ ก็ใช่ แต่นั่นเป็นปัญหาที่แม่นยำ
ฉันพบโพสต์นี้ซึ่งอธิบายว่า "การเปิดใช้งาน" แพ็คเกจประกอบด้วยการอ่านไฟล์ autoload และการตั้งค่าโหลดพา ธ สิ่งนี้เห็นได้ชัดว่าเป็นการลงโทษ I / O เมื่อคุณมีแพ็กเกจมากมายเนื่องจากคุณมีไฟล์ autoload จำนวนมากที่จะอ่านและเส้นทางมากมายที่จะตั้งค่า น่าเสียดายที่ไม่มีสิ่งนี้หน้าที่ในการจัดการ autoloads จะตกไปอยู่ในมือของผู้ใช้ กล่าวอีกนัยหนึ่งโดยไม่ปล่อยให้package.el
ระบบไฟล์รวบรวมข้อมูลไฟล์และพา ธ อัตโนมัติฉันจะต้องจัดการตัวเองซึ่งอาจเป็นกระบวนการที่น่าเบื่อและผิดพลาดได้ง่าย
ฉันไม่อยากลงไปที่ถนนเส้นนั้น ปัจจุบันฉันมี 116 แพคเกจโดยมี 107 รายการจาก ELPA และ 25 รายการซึ่งเป็นการอ้างอิง ฉันแน่ใจว่าหมายเลขมหันต์นี้เป็นสิ่งที่ทำให้การแสดงของฉันแย่ลงมาก แต่ฉันไม่แน่ใจเพราะฉันไม่ต้องการลบแพ็คเกจใด ๆ ของฉัน
มีวิธีแก้ไขในสถานการณ์เช่นนี้เพื่อให้เวลาในการเริ่มต้นฟ้าผ่ากลับคืนมาหรือไม่?
ปรับปรุง:
เราได้เริ่มต้นหัวข้อใหม่ในemacs-devel
รายการจดหมายเกี่ยวกับบางส่วน แพทช์โดยสเตฟาน Monnier (คำอธิบายของแพทช์เหล่านี้คือที่นี่ ) เพื่อแก้ปัญหานี้ ทุกคนยินดีที่จะทดสอบแพทช์ของเขาและให้ข้อเสนอแนะ
การปรับปรุงอื่น:
ดูเหมือนว่า Stefan Monnier อาจไม่สนใจปัญหานี้อีกต่อไปหรือเขาไม่ได้รับข้อความของฉัน ฉันมีแนวโน้มที่จะเชื่อว่าอดีตซึ่งไม่เป็นไรแม้ว่าฉันจะขอบคุณการตอบสนองบางอย่างจากเขาหากเป็นเช่นนั้น อย่างไรก็ตามรหัสที่เขาได้ผลิตสำหรับปัญหานี้จนถึงตอนนี้ทำงานได้ค่อนข้างดี แพทช์ล่าสุดของเขาสามารถพบได้ที่นี่ (สำหรับ Emacs 25.3)และที่นี่ (สำหรับสาขาหลักของ Emacs)ฉันได้เห็นการปรับปรุงที่ดีเกี่ยวกับเวลาเริ่มต้นของฉันเนื่องจากแพทช์ของเขาและฉันอยู่ในจุดที่ฉันพอใจกับเวลาเริ่มต้นของฉันจนถึงเวลาที่เหมาะสมที่สุดเท่าที่จะเป็นไปได้โดยไม่ลดคุณสมบัติการปรับแต่งของฉัน ฉันหวังว่าแพทช์เหล่านี้จะทำให้มันเข้าสู่การฉีดของ Emacs ในบางจุด แต่ฉันเดาว่าฉัน (หรือคนอื่น) จะต้องใช้คบเพลิงแทนตอนนี้แทนสเตฟาน เรามีรายชื่อผู้รับจดหมายบางส่วนเกี่ยวกับการโอนลิขสิทธิ์และการให้สิทธิ์ใช้งาน ตอนแรกฉันรู้สึกไม่สบายใจที่จะทำเช่นนั้น แต่เนื่องจากความคิดเห็นบางส่วนจาก Richard Stallman และคนอื่น ๆ การมอบหมายงานลิขสิทธิ์อาจไม่เข้มงวดเท่าที่ฉันคิดไว้ในตอนแรก ยิ่งไปกว่านั้นมันเป็นไปได้สำหรับฉันที่จะมอบหมายงานของฉันให้เป็นสาธารณสมบัติแทนการมอบหมายงานด้านลิขสิทธิ์
ไม่ว่าในกรณีใด ๆ ขอบคุณ Stefan สำหรับแพทช์จนถึงตอนนี้! ฉันหวังว่าคุณจะพัฒนาการเปลี่ยนแปลงเหล่านี้ต่อไป แต่ถ้าไม่เป็นเช่นนั้นก็ไม่เป็นไรและฉันอาจพัฒนาต่อไปในบางจุด ฉันขอขอบคุณทุกคนที่เสนอข้อมูลเชิงลึกและการมีส่วนร่วมในการแก้ไขปัญหานี้
ยังมีการอัพเดทอื่น:
ว้าวดูเหมือนว่าคุณสมบัตินี้จะมาถึงในที่สุดและจะอยู่ใน Emacs 27 ขอบคุณ Stefan Monnier!
use-package
เป็นวิธีที่จะไปสำหรับสิ่งนี้