Frage

Ich verstehe die feinen Unterschiede zwischen require, load und autoload in Ruby, aber meine Frage ist, wie Sie wissen, welche zu benutzen?

Anders als in der Lage zu „wickeln“ ein load in einem anonymen Modul scheint require vorzuziehen.

Aber dann autoload können Sie faul Last-Dateien - was fantastisch klingt, aber ich bin nicht sicher, praktisch, was Sie über require gewinnen

Ist ein Verfahren gegenüber dem anderen bevorzugt? Gibt es eine Situation, in der ein Verfahren zeichnet sich durch?

War es hilfreich?

Lösung

Im Allgemeinen sollten Sie require verwenden. load wird der Code jedes Mal neu geladen werden, so dass, wenn Sie es aus mehreren Modulen zu tun, werden Sie eine Menge zusätzlicher Arbeit tun. Die lazyness von autoload klingt gut in der Theorie, aber viele Ruby-Module Dinge tun, wie Affen-Patching anderen Klassen, was bedeutet, dass das Verhalten der unabhängigen Teile des Programms abhängen kann, ob eine bestimmte Klasse hat noch oder nicht verwendet worden. autoload ist in dem Prozess der veraltet ist, so sollte ihre Verwendung vermieden werden.

Wenn Sie Ihre eigene automatische reloader machen, die Ihren Code lädt jedes Mal, es ändert oder jedes Mal, wenn jemand schlägt eine URL (für die Zwecke der Entwicklung, so dass Sie nicht neu starten müssen, um Ihren Server jedes Mal), dann load Verwendung für die sinnvoll ist.

Andere Tipps

mylibrary.rb

puts "I was loaded!"

class MyLibrary
end

Versuchen in irb

irb(main):001:0> require 'mylibrary'
I was loaded!
=> true

irb(main):001:0> autoload :MyLibrary, 'mylibrary'
=> nil
irb(main):002:0> MyLibrary.new
I was loaded!
=> #<MyLibrary:0x0b1jef>

Sehen Sie den Unterschied.

Hier ist, was Sie gewinnen mit autoload über require:

autoload ist in erster Linie für die Initialisierungsphase des Ruby-Programms oder Rails-Anwendung zu beschleunigen. Durch den Verzicht auf die Ressourcen geladen, bis sie benötigt werden, kann es durchaus Dinge ein wenig beschleunigen.

Ein weiterer Vorteil ist, dass Sie nicht einige Teile des Codes laden müssen, wenn der Benutzer nicht bestimmte Funktionen nicht verwendet -. Dadurch Verbesserung der Ladezeit und den Speicherbedarf zu reduzieren

Neben was andere Ihnen schon gesagt, Zukunft autoload ist ungewiss. Es wurde in Ruby 2.0 wird als veraltet geplant, aber die deprecation wurde nicht rechtzeitig für das 2.0 Feature Freeze gemacht. Es wird nun erwartet, dass autoload wird in Ruby 2.1 veraltet, aber das ist nicht einmal sicher mehr .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top