Apa beberapa hal dasar yang bisa saya lakukan untuk mengurangi waktu start-up?
Apakah ada hal khusus yang harus saya perhatikan?
Catatan: Waktu mulai dapat dikurangi dengan memulai Emacs lebih jarang (sekali per sesi) dan membuka file dalam instance yang sedang berjalan . Pertanyaan ini adalah tentang meminimalkan waktu startup, untuk memulai sesi atau waktu lain ketika memulai Emacs diperlukan.
Lihat juga pertanyaan yang sama dijawab di Stack Overflow, dengan skor tanya dan jawab lebih dari 50 dan 30 - beberapa penanda "favorit". Jawaban yang baik di sini harus melampaui apa yang tersedia di Stack Overflow.
init-file
performance
start-up
caisah
sumber
sumber
Jawaban:
Inilah poin saya tentang pengurangan
emacs-init-time
, ini tidak mencakup hal-hal seperti menggunakan daemon atau server, tidak perlu dikatakan bahwa Anda harus jarang pernah menutup emacs.Jangan:
Jangan memerlukan paket di init Anda, jika paket tidak memiliki cookie muat-otomatis yang tepat, pastikan Anda mengatur pengisian-otomatis pada perintah entri. Jadi jika pertama kali Anda menggunakan paket
foobar
akan dengan meneleponfoobar-mode
danfoobar
tidak datang pra-autoload Anda akan membutuhkan sesuatu seperti ini:ini akan memungkinkan Anda untuk menelepon
foobar-mode
bahkan ketikafoobar
paket belum dimuat. Carafoobar
ini tidak akan dimuat sebelum Anda benar-benar meneleponfoobar-mode
Jangan jalankan
package-refresh-contents
jika Anda tidak perlu menginstal paket saat startup. Jika Anda init sedang menyiapkan untuk menginstal secara otomatis paket yang hilang, pertimbangkan untuk menyiapkan arg baris perintah untuk Anda tentukan kapan pemasangan otomatis akan terjadi.desktop
init Anda kecuali Anda benar-benar ingin.Melakukan
Gunakan sesuatu seperti
use-package
mengelola paket Anda. Ini membuatnya mudah untuk menentukan apa yang diperlukan, apa yang akan dimuat nanti, apa yang secara otomatis memuat apa dan membuat profil init Anda pada suatu paket berdasarkan paket menjadi mudah.Ketahui perbedaan antara memuat tema dan mengaktifkannya. Singkatnya, Anda dapat memuat sebanyak yang Anda inginkan, tetapi pastikan Anda tidak mengaktifkan lebih dari satu. Idealnya, hanya memuat dan mengaktifkan satu tema.
load-theme
membutuhkan arg opsional untuk mencegah pengaktifan tema. Mungkin mudah untuk secara tidak sengaja mengaktifkan beberapa tema yang lambat dan jelek saat startup.Jangan curang: Seringkali ada mode global besar yang ingin Anda muat di init, hal-hal seperti undo-tree, autocomplete, ido-mode dll. Pastikan fungsi entri memiliki pengaturan pengisian otomatis lalu mulai penghitung waktu kosong di init Anda untuk memuat paket . Saya melakukan ini akan
undo-tree-mode
,ido
dan yang lainnya dan tidak pernah melihat penundaan karena pada saat saya benar-benar perlu menggunakannya, mereka sudah dimuat.Pembaruan: paket penggunaan telah sedikit berubah, baca readme resmi sebelum Anda mulai menggunakan fitur-fitur pengatur waktu.
Misalnya: jika Anda ingin sedikit menunda pemuatan,
global-undo-tree-mode
Anda dapat memasukkan ini ke init Anda:Sekarang init Anda dapat terus berlanjut dengan bahagia dan
global-undo-tree-mode
tidak akan benar-benar diaktifkan sampai setelah semuanya siap untuk pergi dan Anda berada di belakang kemudi.use-package
memiliki dukungan untuk perilaku seperti ini yang dibangun menggunakan kata kunci: idle. Ini adalahundo-tree
konfigurasi dari .init.el saya:Lakukan profil init Anda, selalu mengejutkan untuk melihat di mana perlambatan sebenarnya. profile-dotemacs.el adalah alat luar biasa yang saya gunakan untuk membantu saya menurunkan init saya dari ~ 6 detik menjadi <1 detik.
use-package
Init yang dikonfigurasi dengan baik bisa sangat cepat. Saya tidak byte-compile init saya dan digunakanuse-package
untuk mengkonfigurasi 95 paket dan mulai dalam <1 detik.sumber
(require 'org)
garis itu. :-)(run-with-idle-timer 1 nil #'global-undo-tree-mode)'. If the function you are loading takes parameters you can just provide them after the
perintah # '`.Sesuatu yang baru-baru ini muncul di emacs reddit : kurangi jumlah permintaan pengumpulan sampah dengan meletakkannya di dekat bagian awal file init Anda:
Dalam contoh di atas, GC dipanggil setiap ~ 50MB (bukan default ~ 800kb), yang tampaknya masuk akal pada sistem modern dengan banyak RAM.
sumber
emacs-startup-hook
adalah tempat yang baik untuk melakukan itu.Waktu yang Anda habiskan untuk mengoptimalkan waktu startup Anda kemungkinan akan lebih besar daripada semua waktu ekstra yang seharusnya Anda tunggu untuk memulai Emacs.
Saat ini saya melakukan 25
require
panggilan dalam file init saya sehingga Flycheck dapat menemukan kesalahan ejaan dalam kode saya. Waktu startup saya adalah ...Juga, pada sistem saya,
time emacs -Q --eval '(save-buffers-kill-terminal)'
memilikireal
dari0m0.404s
. Jumlah maksimum teoretis waktu yang bisa saya hemat adalah 2,3 detik.Katakanlah bahwa saya menghabiskan satu jam membuat semua masalah optimasi ke file init saya. (Saya tidak akan menghitung tambahan 15-30 menit yang dihabiskan di kemudian hari mencoba mencari tahu mengapa perubahan saya tidak berpengaruh karena file init saya sedang byte-dikompilasi.) (Saya juga tidak akan menghitung waktu yang Flycheck akan menyelamatkan saya di debugger jika saya tidak menghapus
require
panggilan.) Ada 3600 detik dalam satu jam, jadi jika saya berhasil menyelamatkan seluruh 2,3 detik, investasi saya pada waktunya hanya akan terbayar setelah 1565 startup.Dengan asumsi saya memulai kembali Emacs 3 kali sehari, setiap hari, itu akan memakan waktu satu setengah tahun untuk investasi untuk melunasi. Jika saya membiarkan instance Emacs yang sama berjalan selama berhari-hari pada suatu waktu (seperti yang sering saya lakukan), saya mungkin hanya akan memulai kembali 2-5 kali seminggu, dalam hal ini akan membutuhkan waktu 6 hingga 15 tahun agar investasi itu terbayar.
Saya bersikap murah hati, karena Anda cenderung menghabiskan lebih dari satu jam untuk mengoptimalkan startup Anda, dan Anda mungkin tidak akan menghemat jumlah teoritis maksimum detik.
sumber