D'après ce que je comprends, require
est utilisé pour charger de gros morceaux de code (quelque chose comme des modules) bien qu'il puisse également charger des fonctions individuelles.
L'autochargement de l'autre côté, enregistre uniquement les fonctions et reporte le chargement au temps d'exécution.
J'ai récemment lu un article qui préconise l'utilisation autoload
exclusive de.
Est-ce mieux autoload
que de faire require
? Quels sont les cas d'utilisation typiques pour chacun d'eux?
autoload
etrequire
de cette question. Ajouter une baliselibraries
était bien, mais maintenant, toute personne recherchant, utilisant des balises, des questions surautoload
ourequire
ne trouvera pas celle-ci. Ce sont deux fonctions importantes d'Emacs-Lisp que les gens rechercheront. Dommage. Et pensez à quel pointelisp
etlibraries
(en particulierelisp
) sera vraiment pratique pour un site Emacs: ils ne se distinguent pas beaucoup dans Emacsland, je le crains. (Mais non, je ne suis pas contre les avoir et les utiliser.)autoload
etrequire
je pense que ces balises sont justifiées. En fait, étiqueter cette question [uniquement] aveclibraries
est une généralisation excessive. Pour ma part, pourrequire
déclencher le chargement de "my-foobar-cfg", qui, comme son nom l'indique, ne contient que ma configuration, pas une bibliothèque.Réponses:
autoload
n'est pas un substitut pourrequire
.require
Est généralement utilisé pour s'assurer qu'un certain fichier est chargé.autoload
d'autre part, donne à Emacs une indication dans quel fichier trouver une fonction donnée sans charger le fichier immédiatement. Ce n'est que lorsque la fonction de chargement automatique est appelée que le fichier correspondant est chargé.Fondamentalement,
autoload
vous pouvez retarder le chargement d'un fichier entier au moment où vous en avez réellement besoin. C'est pourquoi (particulièrement les gros) packages définissent généralement leurs fonctions d'entrée commeautoload
s.Si vous souhaitez effectuer de lourdes personnalisations pour un package, vous n'avez généralement pas de chance
autoload
. Si vous souhaitez toujours éviter,require
vous pouvez différer vos personnalisations jusqu'à ce que le fichier ait été chargé à l'aide deeval-after-load
.Le manuel Emacs couvre ce sujet dans les sections suivantes:
la source
autoload
s'agit (plus ou moins) de fournir des définitions de commandes, afin que vous puissiez utiliser ces commandes.require
consiste à rendre tout disponible dans une bibliothèque (et dans les bibliothèques dont la bibliothèque a besoin, récursivement) disponibles. Emacs ne se limite pas aux commandes. (Mais oui, bien sûr, une fois qu'une commande chargée automatiquement est invoquée, toute sa bibliothèque est chargée.)En termes d'initialisation Emacs, ne faites aucun choix. L'utilisateur de GitHub jwiegley possède l'excellente macro de déclaration use-package , qui nécessitera ou chargera automatiquement un paquet selon les besoins. Il est préférable de différer le chargement des packages pouvant être chargés à la demande.
la source
Si vous voulez qu'une certaine fonctionnalité soit chargée et disponible directement lorsque votre Emacs a démarré, utilisez require, sinon utilisez le chargement automatique. Personnellement, j'apprécie beaucoup le temps de démarrage (je redémarre Emacs plusieurs fois par semaine, parfois plusieurs fois par jour), donc j'accepte que cela prenne un peu de temps lorsque Emacs charge automatiquement une certaine fonction lorsque j'en ai besoin. Pensez donc à ce que vous voulez être disponible directement après le démarrage d'Emacs et à ce qui peut être chargé en cas de besoin.
la source