在Rails 3应用程序中使用require_dependency有什么性能影响?

Ant*_*zzo 6 ruby performance ruby-on-rails require

我觉得我理解require和require_dependency之间的区别(来自Rails中的How are require,require_dependency和constants reloading?).

但是,我想知道如果我使用其中的一些方法会发生什么(请参阅http://hemju.com/2010/09/22/rails-3-quicktip-autoload-lib-directory-including-all -subdirectories /从Rails 3中的lib文件夹加载模块/类的最佳方法?)来加载所有文件,所以我们:

  1. 不需要在应用程序中的所有位置使用require_dependency
  2. 当lib目录中的文件发生更改时,不必重新启动开发服务器.

看起来开发性能会受到轻微影响,这对我来说并不是什么大不了的事.如何在生产环境中影响性能?如果您还在生产中,那么所有文件通常只会加载一次吗?有没有更好的方式,我没有看到?

如果您可以包含一些我可以阅读更多相关信息的资源,我们将不胜感激.一些博客帖子说最近这种行为改变了,Rails 3用于自动加载lib/*文件,这是有争议的,但我没有看到任何链接到这些讨论.考虑利弊是有帮助的.谢谢!

Sim*_*tsa 4

默认情况下,代码重新加载器在生产中处于禁用状态。因此,如果您在文件顶部调用 require_dependency ,它将仅执行一次。

你提到的 Rails 3 的变化确实很小。您通常可以调用它Foo,它会自动加载app/models/foo.rb。之前它也可以从 加载lib/foo.rb。(这些目录称为app/models自动加载路径。)Rails 团队决定在第三版中从自动加载路径中删除 lib。你仍然可以把它放回去。但鼓励在 lib 中保留不经常更改的文件和特定于项目的文件。如果您有不属于任何默认应用程序子目录(例如 app/models 或 app/controllers)的内容,则不必将其放入 lib 中。您可以添加自己的子目录。例如,我有。如果您想了解更多信息,可以对旧问题跟踪器进行讨论。libapp/presenters