Lors de l'utilisation de `besoin`, `charge` ou `autoload` en Ruby?
Je comprends les différences subtiles entre require
, load
et autoload
en Ruby, mais ma question est, comment savez-vous lequel utiliser?
D'autres que d'être capable de "wrap" un load
anonyme module, require
semble être préféré.
Mais alors autoload
vous permet de lazy load fichiers -- qui a l'air fantastique, mais je ne suis pas sûr que pratiquement ce que vous gagnez plus de require
Est un moyen privilégié par rapport à l'autre? Il existe une situation où un méthode se démarque?
Vous devez vous connecter pour publier un commentaire.
En général, vous devez utiliser
require
.load
re-charger le code à chaque fois, donc si vous le faites à partir de plusieurs modules, vous allez faire beaucoup de travail supplémentaire. La paresse deautoload
sonne bien en théorie, mais beaucoup de Ruby modules de faire des choses comme le singe brassage des autres classes, ce qui signifie que le comportement de sans rapport avec les parties de votre programme peut dépendre de l'existence d'une classe donnée a été utilisé ou non.autoload
est en train d'être obsolète, de sorte que son utilisation doit être évitée.Si vous voulez faire votre propre automatique reloader de chargement de votre code à chaque fois qu'il change, ou à chaque fois que quelqu'un frappe une URL (à des fins de développement, de sorte que vous n'avez pas à redémarrer votre serveur à chaque fois), puis à l'aide
load
pour ce qui est raisonnable.autoload
sera obsolète dans les futures versions de Ruby, selon un commentaire par matz.require
pour à la fois le développement et la production.load
ne doit être utilisé que si vous écrivez quelque chose de spécial comme votre propre reloader; mais il y a déjà beaucoup de bonnes reloaders qui existent déjà pour des fins de développement. Rails comprend un, il y a un de disponible pour Sinatra, etc. Si vous utilisezrequire
dans votre code, le reloaders va se comporter correctement.autoload
(bugs.ruby-lang.org/issues/5653#note-46).mylibrary.rb
Essayer dans de la cisr
Voir la différence.
voici ce que vous gagnez avec
autoload
surrequire
:autoload
est principalement pour accélérer la phase d'initialisation de votre Ruby programme ou une application Rails. En ne chargeant pas les ressources jusqu'à ce qu'ils soient nécessaires, il peut accélérer les choses un peu.Un autre avantage est que vous ne pouvez pas besoin de charger certaines parties du code, si l'utilisateur de ne pas utiliser certaines fonctionnalités, améliorant ainsi les temps de charge et de la réduction de l'empreinte mémoire.
En dehors de ce que les autres ont déjà dit, l'avenir de
autoload
est incertain. Il est prévu qu'il sera obsolète dans Ruby 2.0, mais l'abandon n'est pas fait à temps pour la 2.0 gel. Il est maintenant prévu queautoload
sera obsolète dans Ruby 2.1, mais ce n'est même pas certain plus.