Каковы последствия для производительности при использовании require_dependency в приложениях Rails 3? - PullRequest
6 голосов
/ 26 сентября 2011

Мне кажется, я понимаю разницу между require и require_dependency (из Как связаны требования, перезагрузка require_dependency и констант в Rails? ).

Однако мне интересно, что произойдет, если я воспользуюсь различными методами (см. http://hemju.com/2010/09/22/rails-3-quicktip-autoload-lib-directory-including-all-subdirectories/ и Лучший способ загрузить модуль / класс из папки lib в Rails 3? ) чтобы загрузить все файлы, мы:

  1. не нужно использовать require_dependency повсюду в приложении и
  2. не нужно перезапускать серверы разработки при изменении файлов в каталоге lib.

Кажется, что производительность разработки будет слегка подорвана, что для меня не так уж важно. Как повлияет производительность на производственную среду? Все ли файлы обычно загружаются только один раз, если вы все равно работаете? Есть ли лучший способ, которого я не вижу?

Если бы вы могли включить некоторые ресурсы, где я мог бы прочитать больше об этом, они были бы очень признательны. Некоторые записи в блоге сказал, что такое поведение в последнее время изменилось с Rails 3 для autoreloading Lib / * файлы, и что это было спорным, но я не вижу каких-либо ссылок на эти дискуссии. Было бы полезно рассмотреть плюсы / минусы. Спасибо!

1 Ответ

4 голосов
/ 28 июня 2012

Перезагружатель кода отключен по умолчанию на производстве. Поэтому, если вы вызываете require_dependency вверху файла, он будет выполнен только один раз.

Упомянутое вами изменение в Rails 3 действительно мало. Обычно вы можете позвонить на Foo, и он будет автоматически загружен с app/models/foo.rb. Прежде чем он также может быть загружен из lib/foo.rb. (Эти каталоги app/models и lib называются путями автозагрузки .) Команда Rails решила удалить lib из путей автозагрузки в 3-й версии. Вы все еще можете положить его обратно. Но рекомендуется оставлять в lib менее часто изменяемые и специфичные для проекта файлы. Если у вас есть что-то, что не принадлежит ни к одному из подкаталогов приложений по умолчанию, таких как app / models или app / controllers, вам не нужно помещать это в lib. Вы можете добавить свой собственный подкаталог. У меня app/presenters, например. Существует обсуждение на старом трекере, если вы хотите больше информации об этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...