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

时间:2011-09-26 00:34:54

标签: ruby-on-rails ruby performance require

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

但是,我想知道如果我使用其中的一些方法(请参阅http://hemju.com/2010/09/22/rails-3-quicktip-autoload-lib-directory-including-all-subdirectories/Best way to load module/class from lib folder in Rails 3?)以便加载所有文件,会发生什么:

  1. 不需要在应用程序中使用require_dependency和
  2. 当lib目录中的文件发生更改时,不必重新启动开发服务器。
  3. 似乎开发性能会受到轻微影响,这对我来说并不是什么大不了的事。如何在生产环境中影响性能?如果您还在生产中,那么所有文件通常只会被加载一次吗?有没有更好的方法,我没有看到?

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

1 个答案:

答案 0 :(得分:4)

生产中默认禁用代码重新加载器。因此,如果您在文件顶部调用require_dependency,它将只执行一次。

你提到的Rails 3变化真的很小。您通常可以致电Foo,它会自动从app/models/foo.rb加载。之前它也可以从lib/foo.rb加载。 (这些目录app/modelslib称为自动加载路径。)Rails团队决定从第3版中的自动加载路径中删除lib。你仍然可以把它还掉。但是鼓励在lib中留下频繁更改和项目特定的文件。如果您的某些内容不属于任何默认应用程序子目录(如app / models或app / controllers),则不必将其放在lib中。您可以添加自己的子目录。例如,我有app/presenters。如果您想了解更多信息,旧问题跟踪器上有a discussion