Como todos los Emacs sabrán, actualmente estoy sufriendo de mi extensa configuración dot-Emacs. Todos mis paquetes están dentro de los contenedores de use-package
, y compilé por byte todos mis .el
archivos. Incluso con eso, Emacs comienza en 6.4 segundos, y luego carga el resto de los paquetes (alrededor de 40 de ellos) después.
Estaba pensando en otras formas de resolver el largo tiempo de inicio, luego noté algo. El Emacs predeterminado (sin configuración de usuario) usa muchas .el
bibliotecas, que se incluyen con cada Emacs. Están ubicados en \shares\emacs\version number\lisp\
.
Incluso con muchos archivos lisp, logra comenzar en un segundo. Cuando estaba inspeccionando los archivos de muchos paquetes que se incluyen con el Emacs predeterminado, no encontré nada extraordinario que pudiera explicar por qué Emacs logran comenzar en un segundo. ¿Alguien podría decirme cómo Emacs maneja eso, incluso con miles de .el
archivos?
:defer t
en tususe-package
declaraciones siempre que sea posible?C-h i g (elisp) Building Emacs
si está interesado en aprender sobre eso.Respuestas:
Emacs "gestiona" eso al no cargar al inicio, por lo que no detiene la carga de la aplicación principal. Esto a su vez como el efecto de devolver el control del teclado al usuario más rápido.
Pero cuando se carga? En el primer uso de esa función, modo o característica.
¿No se ralentiza? Sí, en el primer uso. Esa es la compensación. ¿Desea reducir la velocidad en el momento del inicio de emacs o en el primer uso?
¿Se nota? La carga en el momento del inicio parece tomar más tiempo ya que otras bibliotecas principales también se cargan. Pero en el primer uso, se siente más rápido ya que solo se carga esa característica de subconjunto.
Entonces, ¿por qué alguien elegiría cargar al inicio? Debido a que a algunos no les importa esperar para cargar todas las bibliotecas de uso frecuente en el inicio, una vez cargadas, todas las operaciones se realizan de manera rápida a partir de entonces.
¿Cómo puedo elegir? Como Drew y otros han señalado en sus respuestas a esta misma pregunta, puede usar la carga automática y trucos similares para controlar. Pero la consideración más importante debe ser su patrón de uso. Si usa emacs como vi, que se abre y cierra constantemente, sí, el tiempo de inicio se vuelve dolorosamente obvio. Pero, por otro lado, si usa emacs ejecutándose todo el tiempo, el tiempo de inicio de 1 segundo o 1 minuto no será tan notable o lo suficientemente importante como para preocuparse.
Tenga en cuenta que puede usar el modo por lotes o Zile para el inicio instantáneo mientras prueba, ejecuta o usa emacs como vi.
Mi preferencia es cargar al inicio para que cualquier error se detecte por adelantado. Prefiero no tener que lidiar con ningún error de carga mientras estoy en medio de un día de trabajo cuando tengo innumerables buffers, modos y estados de compilación activos junto con varias ubicaciones remotas administradas por TRAMP. La depuración de errores de carga automática en tales condiciones no es muy agradable.
fuente
Muchas de las bibliotecas incluidas no se cargan cuando se inicia.
Algunos comandos, etc., se cargan automáticamente , lo que significa que Emacs los reconoce y sabe cómo cargarlos. Cuando intenta utilizar un comando que se carga automáticamente, Emacs carga la biblioteca que lo define, si aún no se ha cargado.
Puede crear sus propias cargas automáticas, ya sea para sus propios comandos o comandos en bibliotecas que no escribió. Consulte el manual de Elisp, nodo Autoload .
fuente
;;;###autoload
) justo antes de una definición de comando en su biblioteca es una forma de darle una definición de carga automática, asegurando que su biblioteca se cargará cuando alguien la invoque.(autoload...)
directamente a su archivo init para registrarlos.Además de las otras respuestas (que explican cómo la mayoría de las bibliotecas en realidad solo se cargan a pedido), también está la cuestión de la carga previa de muchas bibliotecas de elisp centrales dentro del
emacs
ejecutable, lo que proporciona una ilusión de que carga un Muchas cosas increíblemente rápido.Esto se logra ejecutando la llamada versión "desnuda" de Emacs (que es lo que realmente se compiló, y que es completamente funcional, pero contiene solo el intérprete de elisp y otras funciones básicas escritas en C), y diciéndole que cargue todas las bibliotecas de elisp que deberían cargarse previamente, antes de finalmente "descargar" el
emacs
binario real con esas bibliotecas integradas.Este mecanismo se detalla en el manual de elisp:
C-hig
(elisp) Building Emacs
RETSi ha compilado Emacs usted mismo, puede experimentar con este proceso e incluso puede volcar versiones alternativas del ejecutable final si lo desea (generalmente no se recomienda, pero la instalación está ahí).
El
temacs
binario compilado se puede encontrar en elsrc
directorio, y puede comparar la diferencia en las horas de inicio ejecutando cada versión de esta manera:En mi sistema, el primero tarda ~ 4 segundos (durante el cual se cargan 111 bibliotecas elisp), mientras que el último tarda ~ 0.02 segundos.
fuente