Wann sollte `require`,` load` oder `autoload` in Ruby verwendet werden?
Verstehe ich die subtilen Unterschiede zwischen require
, load
und autoload
in Ruby, aber meine Frage ist, wie Sie wissen, welche zu benutzen?
Andere als in der Lage zu "Verpacken", eine load
in einem anonymen Modul require
scheint bevorzugt werden.
Aber dann autoload
können Sie lazy load-Dateien-das klingt fantastisch, aber ich bin mir nicht sicher, praktisch, was Sie gewinnen über require
Ist eine Methode der anderen vorgezogen? Ist es eine situation, wo eine Methode sticht?
InformationsquelleAutor der Frage Mark W | 2009-04-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
In der Regel, sollten Sie
require
.load
neu-laden des Codes jedes mal, wenn Sie so tun es aus mehreren Modulen, die Sie tun werden, eine Menge zusätzlicher Arbeit. Die lazyness vonautoload
klingt in der Theorie schön, aber viele Ruby-Module Dinge tun, wie monkey-patching anderen Klassen, was bedeutet, dass das Verhalten von nicht verwandten Teile des Programms können davon abhängen, ob eine bestimmte Klasse verwendet wurde oder noch nicht.automatische laden
ist auch veraltet, so dass Ihre Verwendung sollte vermieden werden.Wenn Sie wollen, um Ihren eigenen automatischen reloader lädt, die Ihren code jedes mal, wenn es änderungen oder jedes mal, wenn jemand trifft eine URL (für Entwicklungszwecke, so dass Sie nicht haben, um starten Sie den server jedes mal), dann mit
load
für diesen zumutbar ist.InformationsquelleAutor der Antwort Brian Campbell
mylibrary.rb
Versuchen Sie es in irb -
Den Unterschied sehen.
InformationsquelleAutor der Antwort crazycrv
hier ist was Sie gewinnen mit
autoload
überrequire
:autoload
ist in Erster Linie für die Beschleunigung der Initialisierung phase Ihrer Ruby-Programm oder Rails-Anwendung. Durch das nicht laden der Ressourcen, bis Sie gebraucht werden, es beschleunigt die Dinge ein wenig Recht.Ein weiterer Vorteil ist, dass Sie nicht brauchen, um zu laden einige Teile des Codes, wenn der Benutzer nicht über die Verwendung bestimmter features -- damit die Verbesserung der Ladezeit und reduziert den Speicherbedarf.
InformationsquelleAutor der Antwort
Abgesehen von dem, was andere dir schon gesagt haben, die Zukunft der
autoload
ist ungewiss. Es war geplant, veraltet in Ruby 2.0, doch die Missbilligung war nicht rechtzeitig für den 2.0 feature-freeze. Es wird nun erwartet, dassautoload
werden veraltet in Ruby 2.1, aber das ist nicht einmal mehr gewiss.InformationsquelleAutor der Antwort Boris Stitnicky