Quelles sont les choses de base que je pourrais faire pour réduire le temps de démarrage?
Y a-t-il quelque chose en particulier auquel je devrais faire attention, d'ailleurs?
Remarque: le temps de démarrage peut être réduit en démarrant moins souvent Emacs (une fois par session) et en ouvrant des fichiers dans une instance en cours d'exécution . Cette question concerne la réduction du temps de démarrage, pour le démarrage de la session ou tout autre moment où le démarrage d’Emacs est nécessaire.
Voir également la même réponse à Stack Overflow, avec des scores de questions et réponses supérieurs à 50 et à 30 signets "favoris". Les bonnes réponses ici devraient aller au-delà de ce qui est disponible sur Stack Overflow.
init-file
performance
start-up
caisah
la source
la source
Réponses:
Voici mes points sur la réduction
emacs-init-time
, cela ne couvre pas des choses comme l'utilisation d'un démon ou du serveur, il va sans dire que vous devriez rarement fermer emacs.Ne pas:
N'exigez pas de paquet dans votre init, si le paquet ne contient pas de cookies de chargement automatique appropriés, assurez-vous de configurer le chargement automatique dans les commandes d'entrée. Donc, si la première fois que vous utilisez package
foobar
, vous appelezfoobar-mode
etfoobar
n'avez pas fourni de pré-chargement automatique, vous aurez besoin de quelque chose comme ceci:Cela vous permettra d’appeler
foobar-mode
même lorsque lefoobar
paquet n’a pas encore été chargé. Cette manièrefoobar
ne sera pas chargée jusqu'à ce que vous appeliez réellementfoobar-mode
Ne pas exécuter
package-refresh-contents
si vous n'avez pas besoin d'installer des packages au démarrage. Si vous êtes invité à installer automatiquement les paquets manquants, envisagez de configurer un argument de ligne de commande pour que vous puissiez spécifier quand l'installation automatique doit avoir lieu.desktop
init sauf si vous le désirez vraiment.Faire
Utilisez quelque chose comme
use-package
pour gérer vos paquets. Il est ainsi facile de spécifier ce qui doit être demandé, ce qui doit être chargé ultérieurement, ce qui se charge automatiquement et ce qui facilite le profilage de votre init sur une base paquet par paquet.Faites la différence entre charger un thème et l'activer. En bref, vous pouvez en charger autant que vous voulez, mais assurez-vous de ne pas en activer plus d'un. Idéalement, chargez et activez un seul thème.
load-theme
nécessite un argument optionnel pour empêcher l'activation du thème. Il peut être facile d'activer accidentellement plusieurs thèmes, ce qui est lent et moche au démarrage.Trichez: il y a souvent de gros modes globaux que vous voudrez charger dans init, des choses comme undo-tree, autocomplete, ido-mode, etc. Assurez-vous que les fonctions d'entrée ont une configuration de chargement automatique, puis démarrez des minuteries inactives dans votre init pour charger les packages. . Je fais ce testament
undo-tree-mode
,ido
ainsi que d’autres , et je ne remarque jamais de retard, car au moment où j’ai vraiment besoin de les utiliser, ils sont déjà chargés.Mise à jour: use-package a un peu changé, lisez le fichier readme officiel avant de commencer à utiliser les fonctionnalités de la minuterie.
Par exemple: si vous voulez retarder légèrement le chargement,
global-undo-tree-mode
vous pouvez mettre ceci dans votre init:Maintenant, votre init peut continuer joyeusement et
global-undo-tree-mode
ne sera activé que lorsque tout le reste sera prêt et que vous serez au volant.use-package
prend en charge ce type de comportement en utilisant le mot clé: idle. Voici laundo-tree
config de mon .init.el:Profil de votre init, il est toujours surprenant de voir où les vrais ralentissements sont. profile-dotemacs.el est un outil incroyable que j'ai utilisé pour m'aider à faire passer mon init d'environ 6 secondes à <1 seconde.
Un
use-package
init bien configuré peut être incroyablement rapide. Je ne compile pas en octets mon init et il utiliseuse-package
pour configurer 95 paquets et démarre en <1 seconde.la source
(require 'org)
ligne. :-)(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
la commande # '`.Quelque chose qui est apparu récemment sur emacs reddit : réduisez le nombre d’appels de garbage collection en plaçant ceci près du début de votre fichier init:
Dans l'exemple ci-dessus, le GC est appelé tous les 50 Mo (au lieu de 800 Ko par défaut), ce qui semble judicieux sur un système moderne disposant de beaucoup de RAM.
la source
emacs-startup-hook
c'est un bon endroit pour faire ça.Le temps que vous passerez à optimiser votre temps de démarrage sera probablement supérieur à tout le temps supplémentaire que vous auriez autrement attendu au démarrage d'Emacs.
Pour le moment, je passe 25
require
appels dans mon fichier init afin que Flycheck puisse détecter les erreurs d’orthographe dans mon code. Mon temps de démarrage est ...En outre, sur mon système,
time emacs -Q --eval '(save-buffers-kill-terminal)'
a unreal
de0m0.404s
. Le temps maximum théorique que je peux économiser est de 2,3 secondes.Disons que je passe une heure à faire toute l’optimisation de mon fichier init. (Je ne compterai pas les 15 à 30 minutes additionnelles passées à une date ultérieure pour essayer de comprendre pourquoi mes modifications ne prenaient pas effet en raison de la compilation de mon fichier init par octets.) (Je ne compterai pas non plus le temps écoulé. Flycheck m'aurait sauvé dans le débogueur si je n'avais pas supprimé les
require
appels.) Il y a 3600 secondes dans une heure, donc si j'arrivais à économiser les 2,3 secondes, mon investissement en temps ne porterait ses fruits qu'après 1565 démarrages.En supposant que je redémarre Emacs 3 fois par jour, il faudrait un an et demi avant que cet investissement porte ses fruits. Si je laissais la même instance Emacs fonctionner pendant des jours (comme je le fais souvent), je ne redémarrerais probablement que 2 à 5 fois par semaine, auquel cas il faudrait 6 à 15 ans pour que cet investissement soit rentable.
Je suis généreux, car vous passerez probablement plus d'une heure à optimiser votre démarrage et vous ne économiserez probablement pas le nombre maximum de secondes théoriques.
la source