Rubyでのrequire
、load
、autoload
の微妙な違いは理解していますが、私の質問は、どちらを使用するかをどのようにして知るのですか?
load
を匿名モジュールに「ラップ」できることを除いて、require
の方が好ましいようです。
しかしautoload
を使用すると、ファイルを遅延ロードすることができます-素晴らしいように思えますが、実際にrequire
で何が得られるかはわかりません
ある方法が他の方法よりも優先されますか? 1つの方法が目立つ状況はありますか?
通常、require
を使用する必要があります。 load
は毎回コードを再ロードするため、複数のモジュールから実行すると、多くの追加作業が発生します。 autoload
の怠惰は理論的にはいいように聞こえますが、多くのRubyモジュールは、他のクラスのモンキーパッチングなどを実行します。つまり、プログラムの無関係な部分の動作は、特定のクラスがまだ使用されているかどうか autoload
は廃止予定のプロセスです なので、その使用は避けてください。
コードが変更されるたび、または誰かがURLにアクセスするたびにコードをロードする独自の自動リローダーを作成する場合(開発目的のため、毎回サーバーを再起動する必要がないため)、load
それは合理的です。
mylibrary.rb
puts "I was loaded!"
class MyLibrary
end
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>
違いを見ます。
autoload
でrequire
を使用すると、次のようなメリットがあります。
autoload
は、主にRubyプログラムまたはRailsアプリケーションの初期化フェーズを高速化するためのものです。必要になるまでリソースをロードしないことにより、かなりスピードアップできます。
別の利点は、ユーザーが特定の機能を使用しない場合、コードの一部をロードする必要がない場合があることです。これにより、ロード時間が改善され、メモリフットプリントが削減されます。
他の人がすでにあなたに言ったことを除いて、autoload
の将来は不確かです。 Ruby 2.0で非推奨となる予定でしたが、2.0機能の凍結に間に合わず非推奨になりました。autoload
が=で非推奨になることが予想されますRuby 2.1、 しかし、それはもはや確実ではありません 。