Когда использовать `require`, `load` или 'autoload' в Ruby?



Я понимаю тонкие различия между require,load и autoload в Ruby, но мой вопрос в том, как вы знаете, какой из них использовать?



другое, чем быть в состоянии "обернуть" в load в анонимном модуле,require кажется, предпочтительнее.



а то autoload позволяет лениво загружать файлы - что звучит фантастически, но я не уверен практически, что вы получаете над require



один метод предпочтительнее другого? Есть ситуации где один метод выделяется?

582   4  

4 ответов:

как правило, вы должны использовать require. load будет повторно загружать код каждый раз, так что если вы делаете это из нескольких модулей, вы будете делать много дополнительной работы. В ленивости из autoload звучит неплохо в теории, но многие модули Ruby делают такие вещи, как исправление обезьян других классов, что означает, что поведение несвязанных частей вашей программы может зависеть от того, был ли еще использован данный класс или нет. autoload находится в процессе устаревания, поэтому его использование должно быть избежавший.

если вы хотите сделать свой собственный автоматический перегружатель, который загружает ваш код каждый раз, когда он изменяется или каждый раз, когда кто-то попадает в URL (для целей разработки, поэтому вам не нужно каждый раз перезапускать сервер), то с помощью load ибо это разумно.

папку "MyLibrary".РБ

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 over require:

autoload в первую очередь для ускорения фазы инициализации вашей программы Ruby или Rails приложений. Не загружая ресурсы, пока они не понадобятся, это может ускорить процесс совсем немного.

еще одно преимущество заключается в том, что вам может не понадобиться загружать некоторые части кода, если пользователь не использует определенные функции-тем самым улучшая время загрузки и уменьшая объем памяти.

помимо того, что другие уже сказали вам, будущее autoload неопределенно. Он должен был быть устаревшим в Ruby 2.0, но устаревание не было сделано вовремя для замораживания функции 2.0. Теперь ожидается, что autoload будет устаревшим в Ruby 2.1,но это даже не определенное больше.

Comments

    Ничего не найдено.