¿Cuáles son algunas cosas básicas que podría hacer para reducir el tiempo de inicio?
¿Hay algo en particular a lo que deba prestar atención?
Nota: El tiempo de inicio se puede mitigar iniciando Emacs con menos frecuencia (una vez por sesión) y abriendo archivos en una instancia en ejecución . Esta pregunta se trata de minimizar el tiempo de inicio, para el inicio de la sesión o en cualquier otro momento en que sea necesario iniciar Emacs.
Vea también la misma pregunta respondida en Stack Overflow, con puntajes de preguntas y respuestas de más de 50 y 30 marcadores favoritos. Las buenas respuestas aquí deberían ir más allá de lo que está disponible en Stack Overflow.
init-file
performance
start-up
caisah
fuente
fuente
Respuestas:
Aquí están mis puntos sobre la reducción
emacs-init-time
, esto no cubre cosas como usar un demonio o el servidor, no hace falta decir que rara vez debería cerrar emacs.No:
No requiera paquetes en su init, si el paquete no tiene las cookies de carga automática adecuadas, asegúrese de configurar las cargas automáticas en los comandos de entrada. Entonces, si la primera vez que usa el paquete
foobar
será llamandofoobar-mode
yfoobar
no vino precargado automáticamente, necesitará algo como esto:esto le permitirá llamar
foobar-mode
incluso cuando elfoobar
paquete aún no se haya cargado. De esta manerafoobar
no se cargará hasta que realmente llamefoobar-mode
No ejecute
package-refresh-contents
si no necesita instalar paquetes al inicio. Si su init está configurado para instalar automáticamente paquetes faltantes, considere configurar una línea de comando arg para que especifique cuándo debe realizarse la instalación automática.desktop
on init a menos que realmente quiera hacerlo.Hacer
Use algo como
use-package
administrar sus paquetes. Esto facilita la especificación de qué requerir, qué cargar más tarde, qué carga automáticamente y qué perfil facilita su inicio de paquete por paquete.Conozca la diferencia entre cargar un tema y habilitarlo. En resumen, puede cargar tantos como desee, pero asegúrese de no habilitar más de uno. Idealmente, solo carga y habilita un tema.
load-theme
necesita un argumento opcional para evitar la habilitación del tema. Puede ser fácil habilitar accidentalmente varios temas, lo que es lento y feo durante el inicio.Hacer trampa: a menudo hay modos globales grandes que querrás cargar en init, cosas como deshacer el árbol, autocompletar, modo id, etc. . Hago esto
undo-tree-mode
,ido
y otros, y nunca noto un retraso porque para cuando realmente necesito usarlos, ya están cargados.Actualización: use-package ha cambiado un poco, lea el archivo Léame oficial antes de comenzar a usar las funciones del temporizador.
Por ejemplo: si desea retrasar un poco la carga
global-undo-tree-mode
, puede poner esto en su init:Ahora su init puede continuar felizmente y
global-undo-tree-mode
no se activará hasta que todo lo demás esté listo y usted esté detrás del volante.use-package
tiene soporte para este tipo de comportamiento integrado usando la palabra clave: idle. Aquí está laundo-tree
configuración de mi .init.el:Perfile su init, siempre es sorprendente ver dónde están las verdaderas ralentizaciones. profile-dotemacs.el es una herramienta increíble que he usado para ayudarme a bajar mi inicio de ~ 6 segundos a <1 segundo.
Un
use-package
init bien configurado puede ser increíblemente rápido. No compilo en bytes mi init y se usause-package
para configurar 95 paquetes y se inicia en <1 segundo.fuente
(require 'org)
línea. :-)(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
el comando # ''.Algo que apareció recientemente en emacs reddit : disminuya el número de invocaciones de recolección de basura colocando esto cerca del comienzo de su archivo init:
En el ejemplo anterior, el GC se invoca cada ~ 50 MB (en lugar del valor predeterminado de ~ 800 kb), lo que parece razonable en un sistema moderno con mucha RAM.
fuente
emacs-startup-hook
es un buen lugar para hacer eso.El tiempo que pasa optimizando su tiempo de inicio probablemente será mayor que todo el tiempo extra que de otro modo hubiera esperado a que Emacs se iniciara.
En este momento hago 25
require
llamadas en mi archivo init para que Flycheck pueda encontrar errores ortográficos en mi código. Mi tiempo de inicio es ...Además, en mi sistema,
time emacs -Q --eval '(save-buffers-kill-terminal)'
tiene unareal
de0m0.404s
. La cantidad máxima teórica de tiempo que puedo ahorrar es de 2,3 segundos.Digamos que paso una hora haciendo todo tipo de optimizaciones en mi archivo de inicio. (No contaré los 15-30 minutos adicionales que pasé en una fecha posterior tratando de averiguar por qué mis cambios no entraron en vigencia debido a que mi archivo init se compila en bytes). (Tampoco contaré el tiempo que Flycheck me habría salvado en el depurador si no hubiera eliminado las
require
llamadas.) Hay 3600 segundos en una hora, por lo que si lograra ahorrar los 2.3 segundos completos, mi inversión en tiempo solo se amortizaría después de 1565 inicios.Suponiendo que reiniciara Emacs 3 veces al día, todos los días, tomaría un año y medio para que esa inversión valga la pena. Si dejara la misma instancia de Emacs ejecutándose durante días (como lo hago a menudo), probablemente solo reiniciaría de 2 a 5 veces por semana, en cuyo caso tomaría entre 6 y 15 años para que esa inversión valga la pena.
Estoy siendo generoso, porque es probable que pases más de una hora optimizando tu inicio, y probablemente no guardarás la cantidad máxima teórica de segundos.
fuente