TL; DR Tengo una cantidad tan grande de paquetes que está perjudicando mi tiempo de inicio. Si no crees que ese podría ser el caso, sigue leyendo.
Mi tiempo de inicio de Emacs es bastante pequeño. No lo uso use-package
, solo configuro toneladas de ganchos y autoload
s para que se difiera casi todo el código. En realidad, todo se carga en menos de medio segundo, a pesar de que parece un desastre loco.
Sin embargo, con el tiempo me di cuenta de que mi tiempo de inicio se pone minuciosamente más lenta, inexplicablemente. Esto finalmente ha llegado al punto donde el tiempo de inicio es ≥ 1 segundo. Finalmente tuve suficiente y profundicé en la raíz del problema. Finalmente comenté todo mi ~/.emacs
archivo y descubrí que el tiempo de inicio todavía era ≥ 1 segundo. De hecho, solo se había reducido ~ 0.2
segundos, a veces incluso menos. Luego intenté emacs -q
y descubrí que el tiempo de inicio era de ~ 0.1
segundos.
Al examinar esta sección del manual de Elisp, descubrí por qué emacs -q
estaba reduciendo tanto el tiempo de inicio. Aparentemente emacs -q
impide que Emacs haga tres cosas al inicio:
- cargando su archivo de inicio
- cargando su
default.el
archivo - vocación
package-initialize
Ya hemos descartado mi archivo de inicio, ya que comentar todo ~/.emacs
no hace casi nada. No uso un default.el
archivo, por lo que también se descarta. Lo que deja package-initialize
como el culpable del éxito de rendimiento.
¿Por qué estaría package-initialize
tomando tanto tiempo de inicio? Esa fue la primera pregunta que me hice. ¿No estoy cargando todo automáticamente? Bueno, sí. Pero ese es precisamente el problema.
Encontré esta publicación que explica que "activar" paquetes consiste en leer archivos de carga automática y establecer rutas de carga. Obviamente, esto incurre en una penalización de E / S cuando tiene muchos paquetes porque tiene muchos archivos de carga automática para leer y muchas rutas para configurar. Desafortunadamente, sin esto, la tarea de administrar las cargas automáticas cae en manos del usuario. En otras palabras, sin dejar que package.el
rastree el sistema de archivos para la carga automática de archivos y rutas, tendría que administrarlo yo mismo, lo que podría ser un proceso tedioso y propenso a errores.
Preferiría no ir por ese camino. Actualmente tengo 116 paquetes, de los cuales 107 son de ELPA y 25 de los cuales son dependencias. Estoy seguro de que este enorme número es lo que está degradando tanto mi rendimiento. Pero estoy en un dilema porque no quiero eliminar ninguno de mis paquetes.
¿Existe algún remedio en tal situación para recuperar el tiempo de inicio de mi rayo?
Actualizar:
Hemos comenzado un nuevo hilo en la emacs-devel
lista de correo sobre algunos parches de Stefan Monnier (una descripción de estos parches está aquí ) para resolver este problema. Cualquiera puede probar sus parches y dar su opinión.
Otra actualización:
Parece que Stefan Monnier ya no está interesado en este problema o no está recibiendo mis mensajes. Me inclino a creer lo primero, lo cual está bien, aunque agradecería algún tipo de respuesta de él si ese fuera el caso. De todos modos, el código que ha producido para este problema hasta ahora funciona bastante bien. Los parches más recientes suyos se pueden encontrar aquí (para Emacs 25.3) y aquí (para la rama maestra de Emacs).He visto buenas mejoras en mi tiempo de inicio gracias a sus parches y estoy en un punto en el que me siento cómodo con mi tiempo de inicio de tal manera que esté lo más optimizado posible sin eliminar las características de mi personalización. Esperaba que estos parches llegaran a la línea principal de Emacs en algún momento, pero supongo que yo (o alguien más) tendría que tomar la antorcha ahora, en lugar de Stefan. Tuvimos un poco de discusión en la lista de correo sobre asignación de derechos de autor y licencias. Inicialmente me sentí incómodo al hacerlo, pero debido a algunos comentarios de Richard Stallman y otros, la asignación de derechos de autor puede no ser tan restrictiva como pensaba originalmente. Además, es posible que pueda comprometer mis trabajos al dominio público como una alternativa a la asignación de derechos de autor.
En cualquier caso, ¡gracias Stefan por los parches hasta ahora! Espero que continúes desarrollando estos cambios, pero si no, está bien y puedo continuar desarrollándolo en algún momento. También agradezco a todos los demás que ofrecieron información y contribución para resolver este problema.
Otra actualización más:
Wow, parece que esta característica finalmente aterrizó y estará en Emacs 27. ¡Gracias a Stefan Monnier!
use-package
es el camino a seguir para esto.