Rubyで「require」、「load」、または「autoload」を使用する場合

StackOverflow https://stackoverflow.com/questions/804297

  •  03-07-2019
  •  | 
  •  

質問

Rubyの require load 、および autoload の微妙な違いを理解していますが、私の質問は、どれをどのように知るかです。つかいます?

「ラップ」できること以外匿名モジュールの load require が優先されるようです。

しかし、 autoload を使用すると、ファイルの遅延ロードが可能になります。これは素晴らしいように聞こえますが、 require

で得られるものは実際にはわかりません

1つの方法が他の方法よりも優先されますか? 1つの方法が際立っている状況はありますか?

役に立ちましたか?

解決

通常、 require を使用する必要があります。 load は毎回コードを再ロードするため、複数のモジュールからコードを実行すると、多くの余分な作業が必要になります。 autoload の遅延は理論上はいいように見えますが、多くのRubyモジュールは他のクラスのモンキーパッチのようなことを行います。つまり、プログラムの無関係な部分の動作は、特定のクラスまだかどうか。 autoload は非推奨になりつつあるため、その使用避けるべきです。

コードが変更されるたびに、または誰かがURLにアクセスするたびにコードをロードする独自の自動リローダーを作成する場合(開発目的のため、毎回サーバーを再起動する必要はありません)、読み込みは合理的です。

他のヒント

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>

違いをご覧ください。

require ではなく autoload で得られるもの:

autoload は、主にRubyプログラムまたはRailsアプリケーションの初期化フェーズを高速化するためのものです。必要になるまでリソースをロードしないことで、物事をかなりスピードアップできます。

別の利点は、ユーザーが特定の機能を使用しない場合、コードの一部をロードする必要がない場合があることです。これにより、ロード時間が改善され、メモリフットプリントが削減されます。

他の人がすでにあなたに言ったことは別として、 autoload の将来は不確かです。 Ruby 2.0では廃止される予定でしたが、2.0機能の凍結に間に合うように廃止は行われませんでした。 autoload はRuby 2.1で非推奨になります、もう定かではない

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top