TL; DR Saya memiliki sejumlah besar paket yang mengganggu waktu startup saya. Jika Anda tidak percaya itu bisa terjadi, baca terus.
Waktu startup Emacs saya cukup kecil. Saya tidak menggunakan use-package
, saya hanya mengatur banyak kait dan autoload
s sehingga hampir semua kode ditangguhkan. Pada kenyataannya semuanya dimuat dalam biasanya kurang dari setengah detik, meskipun tampak seperti kekacauan gila.
Namun, seiring waktu saya melihat bahwa waktu startup saya mendapat teliti lebih lambat, entah kenapa. Ini akhirnya sampai pada titik di mana waktu startup adalah ≥ 1 detik. Saya akhirnya merasa cukup dan saya menggali akar masalahnya. Saya akhirnya berkomentar seluruh ~/.emacs
file saya dan menemukan bahwa waktu startup masih ≥ 1 detik. Bahkan, itu hanya mencukur ~ 0.2
detik, terkadang bahkan kurang. Kemudian saya mencoba emacs -q
dan menemukan bahwa waktu startup adalah ~ 0.1
detik.
Setelah memeriksa bagian manual Elisp ini, saya mengetahui mengapa emacs -q
begitu banyak mengurangi waktu startup. Tampaknya emacs -q
menghentikan Emacs dari melakukan tiga hal saat startup:
- memuat file init Anda
- memuat
default.el
file Anda - panggilan
package-initialize
Kami sudah mengesampingkan file init saya, karena mengomentari seluruh file saya ~/.emacs
hampir tidak ada. Saya tidak menggunakan default.el
file, jadi itu juga dikesampingkan. Yang meninggalkan package-initialize
sebagai biang keladi untuk kinerja hit.
Mengapa package-initialize
menghabiskan banyak waktu startup? Itu adalah pertanyaan pertama yang saya tanyakan pada diri saya sendiri. Bukankah saya mengatur semuanya secara otomatis? Baiklah. Tapi itu justru masalah.
Saya menemukan posting ini yang menjelaskan bahwa "mengaktifkan" paket terdiri dari membaca file autoload dan mengatur path load. Ini jelas menimbulkan penalti I / O ketika Anda memiliki banyak paket karena Anda memiliki banyak file autoload untuk dibaca dan banyak jalur untuk ditetapkan. Sayangnya, tanpa ini, tugas mengelola pengisian otomatis jatuh ke tangan pengguna. Dengan kata lain, tanpa membiarkan package.el
crawl sistem file untuk file dan path autoload, saya harus mengelolanya sendiri yang bisa menjadi proses yang membosankan dan rawan kesalahan.
Saya lebih suka tidak menyusuri jalan itu. Saat ini saya memiliki 116 paket, dengan 107 di antaranya dari ELPA dan 25 di antaranya adalah dependensi. Saya yakin bahwa angka kekalahan ini adalah yang sangat merendahkan kinerja saya. Tapi saya dalam kesulitan karena saya tidak ingin menghapus paket saya.
Apakah ada obat dalam situasi seperti itu untuk mendapatkan waktu startup kilat saya kembali?
Memperbarui:
Kami telah memulai utas baru di emacs-devel
milis tentang beberapa tambalan oleh Stefan Monnier (deskripsi tambalan ini ada di sini ) untuk menyelesaikan masalah ini. Siapa pun boleh mencoba tambalannya dan memberikan umpan balik.
Pembaruan lain:
Tampaknya Stefan Monnier tidak tertarik pada masalah ini lagi atau dia tidak menerima pesan saya. Saya cenderung percaya yang pertama, yang baik-baik saja, meskipun saya akan menghargai semacam respons dari dia jika itu masalahnya. Bagaimanapun, kode yang telah dia hasilkan untuk masalah ini sejauh ini bekerja dengan cukup baik. Tambalan terakhirnya dapat ditemukan di sini (untuk Emacs 25.3) dan di sini (untuk cabang utama Emacs).Saya telah melihat peningkatan yang baik pada waktu startup saya berkat tambalannya dan saya berada pada titik di mana saya merasa nyaman dengan waktu startup saya sedemikian rupa sehingga dapat dioptimalkan semaksimal mungkin tanpa memotong fitur kustomisasi saya. Saya berharap tambalan-tambalan ini akan membuatnya menjadi arus utama Emacs di beberapa titik, tapi saya kira saya (atau orang lain) harus mengambil obor untuk itu sekarang, bukan Stefan. Kami memiliki sedikit spar di milis tentang penugasan hak cipta dan lisensi. Awalnya saya merasa tidak nyaman melakukannya, tetapi karena beberapa komentar dari Richard Stallman dan yang lainnya, tugas hak cipta mungkin tidak seketat yang saya kira. Selain itu, mungkin bagi saya untuk melakukan karya saya ke domain publik sebagai alternatif penugasan hak cipta.
Bagaimanapun, terima kasih Stefan untuk tambalan sejauh ini! Saya harap Anda akan terus mengembangkan perubahan ini, tetapi jika tidak, tidak apa-apa dan saya dapat terus mengembangkannya di beberapa titik. Saya juga berterima kasih kepada semua orang yang menawarkan wawasan dan kontribusi untuk menyelesaikan masalah ini.
Namun pembaruan lainnya:
Wow, sepertinya fitur ini akhirnya mendarat dan akan ada di Emacs 27. Terima kasih kepada Stefan Monnier!
use-package
adalah cara untuk pergi untuk ini.