TL; DR Başlangıç zamanımı incitecek kadar büyük paketlerim var. Durumun böyle olabileceğine inanmıyorsanız, okumaya devam edin.
Emacs'ımın başlama süresi oldukça az. Kullanmıyorum use-package
, sadece tonlarca kanca ve autoload
s ayarladım, böylece neredeyse tüm kodlar ertelendi. Gerçekte, her şey çılgın bir karmaşa gibi görünse de, genellikle yarım saniyeden daha az bir sürede yüklenir.
Ancak, zaman içinde benim başlangıç zamanı alır fark inceden açıklanamaz, yavaş. Bu sonunda başlangıç zamanının ≥ 1 saniye olduğu noktaya geldi. Sonunda yeteri kadar yaşadım ve sorunun kökünü araştırdım. Sonunda tüm dosyama yorum yaptım ~/.emacs
ve başlangıç zamanının hala ≥ 1 saniye olduğunu gördüm . Aslında, sadece 0.2
birkaç saniye, bazen daha da az tıraş olmuştu . Sonra denedim emacs -q
ve başlangıç zamanının ~ 0.1
saniye olduğunu buldum .
Elisp kılavuzunun bu bölümünü inceledikten sonra , emacs -q
başlatma süresini neden bu kadar azalttığını öğrendim . Görünüşe göre emacs -q
Emacs'ın başlangıçta üç şey yapmasını engelliyor:
- init dosyanızı yüklemek
default.el
dosyanızı yüklemek- çağrı
package-initialize
Tüm dosyama yorum yapmak ~/.emacs
neredeyse hiçbir şey yapmadığından , init dosyamı zaten dışlamıştık . Bir default.el
dosya kullanmıyorum , bu yüzden de reddedildi. Hangi package-initialize
performans hit için suçlu olarak bırakır .
Neden package-initialize
bu kadar başlangıç zamanı alıyor? Kendime sorduğum ilk soru buydu. Her şeyi otomatik olarak yüklemiyor muyum? İyi evet. Ama bu tam da bir sorundur.
Bulduğum bu yazı paketleri "aktive" özdevinimli_yükle dosyaları okuma ve yük yolları ayar oluştuğunu açıklar. Bu, çok sayıda paketiniz olduğunda açık bir G / Ç cezasına neden olur, çünkü okunacak çok sayıda otomatik yükleme dosyanız ve ayarlamanız gereken birçok yol vardır. Ne yazık ki, bu olmadan, otomatik yükleri yönetme görevi kullanıcının eline düşer. Başka bir deyişle, package.el
otomatik yükleme dosyaları ve yolları için dosya sistemini taramaya izin vermeden , sıkıcı ve hataya açık bir süreç olabilecek kendimi yönetmem gerekir.
O yoldan aşağı gitmemeyi tercih ederim. Şu anda 116 paketim var ve 107 tanesi ELPA'dan ve 25 tanesi bağımlılık. Eminim bu okkalı sayı performansımı bu kadar kötüleştiren şeydir. Ancak bir pakette varım çünkü paketlerimin hiçbirini kaldırmak istemiyorum.
Böyle bir durumda yıldırım açılış zamanımı geri almak için herhangi bir çözüm var mı?
Güncelleme:
Biz başladık yeni bir iş parçacığı üzerinde emacs-devel
yaklaşık posta listesine bazı yamalar tarafından Stefan Monnier'in (bu yamalar tanımıdır burada bu sorunu çözmek için). Herkes yamalarını test edebilir ve geri bildirimde bulunabilir.
Başka bir güncelleme:
Görünüşe göre Stefan Monnier artık bu konuyla ilgilenmiyor ya da mesajımı almıyor. İlkine inanmaya meyilliyim, ki bu iyi, ama eğer durum buysa, ondan bir tür cevabı takdir ediyorum. Her neyse, bu konu için ürettiği kod oldukça iyi çalışıyor. En son yamaları burada (Emacs 25.3 için) ve burada (Emacs ana dalı için) bulunabilir.Yamaları sayesinde başlangıç zamanımda iyi gelişmeler gördüm ve başlangıç zamanımdan, özelleştirmemin özelliklerini kesmeden olabildiğince optimize edildiği için rahat olduğum bir noktadayım. Bu yamaların bir noktada Emacs ana hattına girmesini umuyordum, ama sanırım ben (ya da başka birisinin) bunun yerine meşale almak zorunda kalacaktım, Stefan yerine. E-posta listesinde telif hakkı ataması ve lisanslama konusunda biraz tartışma yaptık. Başlangıçta bunu yapmaktan rahatsız oldum, ancak Richard Stallman ve diğerlerinin bazı yorumları nedeniyle, telif hakkı ataması düşündüğüm kadar kısıtlayıcı olmayabilir. Dahası, çalışmalarımı telif hakkı atamasına alternatif olarak kamu malı yapmak benim için mümkün olabilir.
Her durumda, şimdiye kadar yamalar için Stefan teşekkürler! Umarım bu değişiklikleri geliştirmeye devam edersiniz, ancak değilse, sorun değil ve bir noktada geliştirmeye devam edebilirim. Ayrıca bu sorunun çözümüne içgörü ve katkı sunan herkese teşekkür ediyorum.
Yine başka bir güncelleme:
Vay be, bu özellik nihayet indi ve Emacs 27'de olacak gibi görünüyor . Stefan Monnier sayesinde!
use-package
bunun için bir yol.