문제

나는 사이의 미묘한 차이를 이해합니다 require, load 그리고 autoload 루비에서, 그러나 내 질문은 어떤 것을 사용할 것인지 어떻게 알 수 있습니까?

"포장"할 수없는 것 외에는 a load 익명 모듈에서 require 선호하는 것 같습니다.

하지만 autoload 게으른로드 파일을 허용 할 수 있습니다. 환상적으로 들리지만 실질적으로 당신이 얻는 것이 확실하지 않습니다. require

한 방법이 다른 방법보다 선호됩니까? 하나의 방법이 눈에 띄는 상황이 있습니까?

도움이 되었습니까?

해결책

일반적으로 사용해야합니다 require. load 매번 코드를 다시로드하므로 여러 모듈에서 코드를 수행하면 많은 추가 작업을 수행하게됩니다. 의 게으른 autoload 이론적으로는 멋지게 들리지만 많은 루비 모듈은 원숭이 패치 다른 클래스와 같은 일을합니다. 즉, 프로그램의 관련이없는 부분의 동작은 주어진 클래스가 아직 사용되었는지 여부에 따라 다를 수 있습니다. 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 루비 2.1에서는 더 이상 사용되지 않습니다. 그러나 그것은 더 이상 확실하지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top