Was kann ich tun, um die Startzeit zu verkürzen?
Gibt es etwas, auf das ich besonders achten sollte?
Hinweis: Die Startzeit kann verkürzt werden, indem Emacs weniger häufig gestartet wird (einmal pro Sitzung) und Dateien in einer laufenden Instanz geöffnet werden . Bei dieser Frage geht es um die Minimierung der Startzeit, für den Sitzungsstart oder um eine andere Zeit, zu der das Starten von Emacs erforderlich ist.
Siehe auch die gleiche Frage , die auf Stack Overflow beantwortet wurde, mit Frage-und-Antwort-Punktzahlen über 50 und 30 - einige "Lieblings" -Lesezeichen. Gute Antworten sollten über das hinausgehen, was bei Stack Overflow verfügbar ist.
init-file
performance
start-up
caisah
quelle
quelle
Antworten:
Hier sind meine Punkte zum Reduzieren
emacs-init-time
: Dies gilt nicht für die Verwendung eines Daemons oder des Servers. Es versteht sich von selbst, dass Sie Emacs selten schließen sollten.Nicht:
Sie benötigen keine Pakete in Ihrem Init. Wenn das Paket keine richtigen Autoload-Cookies enthält, stellen Sie sicher, dass Sie Autoloads für die Eingabebefehle einrichten. Wenn Sie das Paket also zum ersten Mal verwenden
foobar
, indem Sie anrufenfoobar-mode
undfoobar
es nicht vorinstalliert wurde, benötigen Sie Folgendes:Auf diese Weise können Sie auch dann anrufen
foobar-mode
, wenn dasfoobar
Paket noch nicht geladen wurde. Dieser Wegfoobar
wird erst geladen, wenn Sie tatsächlich anrufenfoobar-mode
Führen
package-refresh-contents
Sie das Programm nicht aus, wenn Sie beim Start keine Pakete installieren müssen. Wenn Sie init so einrichten, dass fehlende Pakete automatisch installiert werden, sollten Sie ein Befehlszeilenargument einrichten, das angibt, wann die automatische Installation erfolgen soll.desktop
on init nur, wenn Sie es wirklich wollen.Machen
Verwenden Sie etwas wie
use-package
zum Verwalten Ihrer Pakete. Auf diese Weise können Sie auf einfache Weise festlegen, was erforderlich ist, was später geladen werden soll, was automatisch geladen wird und das Profilieren Ihres Init für jedes Paket einfach gestalten.Erkennen Sie den Unterschied zwischen dem Laden und dem Aktivieren eines Themas. Kurz gesagt, Sie können so viele laden, wie Sie möchten, stellen Sie jedoch sicher, dass Sie nicht mehr als eine aktivieren. Im Idealfall laden und aktivieren Sie nur ein Thema.
load-theme
Benötigt ein optionales Argument, um das Aktivieren des Themas zu verhindern. Es kann leicht sein, versehentlich mehrere Themen zu aktivieren, was beim Start langsam und hässlich ist.Betrügen Sie: Es gibt oft große globale Modi, die Sie auf init laden möchten, z. B. Undo-Tree, Autocomplete, Ido-Mode usw. Stellen Sie sicher, dass die Eingabefunktionen über Autoloads-Setup verfügen, und starten Sie in Ihrem init Leerlauf-Timer, um die Pakete zu laden . Ich mache diesen Willen
undo-tree-mode
,ido
und andere , und nie eine Verzögerung feststellen , weil durch die Zeit , die ich brauche wirklich , sie zu nutzen, werden sie bereits geladen.Update: use-package hat sich etwas geändert. Lesen Sie die offizielle Readme-Datei, bevor Sie die Timer-Funktionen verwenden.
Zum Beispiel: Wenn Sie das Laden von etwas verzögern möchten, können
global-undo-tree-mode
Sie dies in Ihr Init einfügen:Jetzt kann Ihr init glücklich weitermachen und
global-undo-tree-mode
wird erst dann aktiviert, wenn alles andere bereit ist und Sie sich ans Steuer setzen.use-package
hat Unterstützung für diese Art von Verhalten mit dem Schlüsselwort: idle eingebaut. Hier ist dieundo-tree
Konfiguration von meinem .init.el:Wenn Sie Ihre Init profilieren, ist es immer wieder überraschend zu sehen, wo die wirklichen Verlangsamungen liegen. profile-dotemacs.el ist ein unglaubliches Tool, mit dessen Hilfe ich mein Init von ~ 6 Sekunden auf <1 Sekunde verringert habe.
Ein gut konfigurierter
use-package
Init kann unglaublich schnell sein. Ich kompiliere mein Init nicht byteweise und es wirduse-package
zum Konfigurieren von 95 Paketen verwendet und startet in <1 Sekunde.quelle
(require 'org)
Linie. :-)(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
# '`command.Etwas, das kürzlich auf emacs reddit aufgetaucht ist : Verringern Sie die Anzahl der Garbage Collection-Aufrufe, indem Sie Folgendes an den Anfang Ihrer Init-Datei setzen:
Im obigen Beispiel wird der GC alle ~ 50 MB (anstelle des Standardwerts von ~ 800 KB) aufgerufen, was auf einem modernen System mit viel RAM sinnvoll erscheint.
quelle
emacs-startup-hook
ist ein guter Ort, um das zu tun.Die Zeit, die Sie für die Optimierung Ihrer Startzeit aufwenden, ist wahrscheinlich länger als die gesamte zusätzliche Zeit, die Sie sonst auf den Start von Emacs gewartet hätten.
Momentan
require
rufe ich 25 Mal in meiner Init-Datei auf, damit Flycheck Rechtschreibfehler in meinem Code findet. Meine Startzeit ist ...Auch auf meinem System
time emacs -Q --eval '(save-buffers-kill-terminal)'
hat einreal
von0m0.404s
. Die theoretische maximale Zeitersparnis beträgt 2,3 Sekunden.Angenommen, ich verbringe eine Stunde damit, alle Optimierungen an meiner Init-Datei vorzunehmen. (Ich zähle die zusätzlichen 15-30 Minuten, die für einen späteren Zeitpunkt aufgewendet wurden, nicht, um herauszufinden, warum meine Änderungen nicht wirksam wurden, weil meine Init-Datei bytekompiliert wurde.) (Ich zähle auch nicht die Zeit dafür Flycheck hätte mich im Debugger gerettet, wenn ich die
require
Anrufe nicht entfernt hätte .) Eine Stunde hat 3600 Sekunden. Wenn ich also die gesamten 2,3 Sekunden einsparen könnte, würde sich meine Zeitinvestition erst nach 1565 Starts auszahlen.Angenommen, ich habe Emacs dreimal am Tag neu gestartet, dann dauerte es anderthalb Jahre, bis sich diese Investition amortisiert hatte. Wenn ich dieselbe Emacs-Instanz tagelang laufen lassen würde (wie ich es oft tue), würde ich wahrscheinlich nur 2-5 Mal pro Woche neu starten. In diesem Fall würde es 6 bis 15 Jahre dauern, bis sich diese Investition auszahlt.
Ich bin großzügig, weil Sie wahrscheinlich mehr als eine Stunde damit verbringen, Ihr Startup zu optimieren, und Sie werden wahrscheinlich nicht die maximale theoretische Anzahl von Sekunden sparen.
quelle