Seperti yang akan diketahui oleh setiap Emacser, saya saat ini menderita konfigurasi dot-Emacs saya yang luas. Semua paket saya ada di dalam wadah use-package
, dan saya bytecompile semua .el
file saya . Bahkan dengan itu, Emacs dimulai dalam 6,4 detik, dan kemudian memuat sisa paket (sekitar 40 dari mereka) sesudahnya.
Saya memikirkan cara lain untuk menyelesaikan waktu startup yang lama, lalu saya perhatikan sesuatu. Emacs default (tanpa konfigurasi pengguna) menggunakan banyak .el
pustaka, yang disertakan dengan setiap Emacs. Mereka terletak di \shares\emacs\version number\lisp\
.
Bahkan dengan banyak file lisp, ia berhasil memulai dalam satu detik. Ketika saya memeriksa file banyak paket yang disertakan dengan Emacs default, saya tidak menemukan apa pun yang luar biasa yang dapat menjelaskan mengapa Emacs dapat memulai dalam satu detik. Adakah yang bisa memberitahu saya bagaimana Emacs mengelola itu, bahkan dengan ribuan .el
file?
:defer t
Andause-package
sedapat mungkin?C-h i g (elisp) Building Emacs
apakah Anda tertarik belajar tentang itu.Jawaban:
Emacs "mengelola" bahwa dengan tidak memuat saat startup sehingga tidak menahan pemuatan aplikasi inti. Ini pada gilirannya sebagai efek mengembalikan kontrol keyboard kepada pengguna lebih cepat.
Tapi kapan itu dimuat? Saat pertama kali menggunakan fungsi, mode, atau fitur itu.
Bukankah itu melambat? Ya, pada penggunaan pertama. Itu kompromi. Apakah Anda ingin memperlambat pada saat startup emacs atau pada penggunaan pertama.
Apakah terlihat? Memuat pada waktu startup tampaknya memakan waktu lebih lama karena pustaka inti lainnya juga dimuat. Tetapi pada penggunaan pertama terasa lebih cepat karena hanya fitur subset yang dimuat.
Lalu mengapa ada orang yang mengambil beban saat startup? Karena beberapa tidak keberatan menunggu untuk memuat semua pustaka yang sering digunakan pada startup sehingga setelah dimuat semua operasi tampil dengan cepat sesudahnya.
Bagaimana saya bisa memilih? Seperti yang Drew dan yang lainnya tunjukkan dalam tanggapan mereka terhadap pertanyaan ini, Anda dapat menggunakan pengisian otomatis dan trik serupa untuk mengontrolnya. Tetapi pertimbangan yang paling penting adalah pola penggunaan Anda. Jika Anda menggunakan emacs seperti vi, terus-menerus membuka dan menutup, ya waktu startup menjadi sangat jelas. Tetapi di sisi lain, jika Anda menggunakan emacs yang berjalan sepanjang waktu, waktu startup 1 detik atau 1 menit tidak akan terlalu terlihat atau cukup penting untuk diperhatikan.
Catatan Anda dapat menggunakan mode batch atau Zile untuk startup instan saat menguji, menjalankan, atau menggunakan emacs seperti vi.
Preferensi saya adalah memuat saat permulaan sehingga setiap kesalahan terungkap dimuka. Saya lebih suka tidak harus berurusan dengan kesalahan pemuatan apa pun di tengah-tengah hari kerja ketika saya memiliki buffer yang tidak terhitung, mode, dan kompilasi status yang aktif bersama dengan beberapa lokasi terpencil yang dikelola oleh TRAMP. Debugging kesalahan pengisian otomatis dalam kondisi seperti itu sangat tidak menyenangkan.
sumber
Banyak perpustakaan yang disertakan tidak dimuat saat Anda memulai.
Beberapa perintah dll. Diisi secara otomatis , yang berarti Emacs mengenalinya dan tahu cara memuatnya. Saat Anda mencoba menggunakan perintah yang dimuat secara otomatis, Emacs kemudian memuat pustaka yang mendefinisikannya, jika belum dimuat.
Anda dapat membuat autoload Anda sendiri, baik untuk perintah Anda sendiri atau perintah di perpustakaan yang tidak Anda tulis. Lihat manual Elisp, simpul Autoload .
sumber
;;;###autoload
) tepat sebelum definisi perintah di perpustakaan Anda adalah salah satu cara untuk memberikannya definisi autoload, memastikan bahwa perpustakaannya akan dimuat ketika seseorang memanggilnya.(autoload...)
langsung di file init Anda untuk mendaftarkan mereka.Selain jawaban lain (yang menjelaskan bagaimana sebagian besar perpustakaan sebenarnya hanya dimuat berdasarkan permintaan), ada juga masalah pra-pemuatan banyak perpustakaan inti inti dalam
emacs
executable itu sendiri, yang memberikan ilusi tentang itu memuat sebuah banyak hal yang sangat cepat.Hal ini dicapai dengan menjalankan apa yang disebut "telanjang" versi Emacs (yang adalah apa yang benar-benar disusun, dan yang merupakan berfungsi secara penuh, namun hanya berisi penafsir elisp dan fungsi inti lainnya ditulis dalam C), dan mengatakan bahwa untuk beban semua pustaka elisp yang harus dimuat sebelumnya, sebelum akhirnya "membuang"
emacs
biner yang sebenarnya dengan pustaka yang dibangun.Mekanisme ini dirinci dalam manual elisp:
C-hig
(elisp) Building Emacs
RETJika Anda telah mengkompilasi Emacs sendiri maka Anda dapat bereksperimen dengan proses ini, dan bahkan dapat membuang versi alternatif dari executable final jika Anda mau (umumnya tidak disarankan, tetapi fasilitas ada di sana).
temacs
Biner yang dikompilasi dapat ditemukan disrc
direktori, dan Anda dapat membandingkan perbedaan waktu mulai dengan menjalankan setiap versi seperti:Pada sistem saya yang pertama membutuhkan ~ 4 detik (di mana 111 perpustakaan elisp dimuat), sedangkan yang kedua membutuhkan ~ 0,02 detik.
sumber