2011-09-26 64 views
6

我觉得我理解require和require_dependency之间的区别(来自How are require, require_dependency and constants reloading related in Rails?)。在Rails 3应用程序中使用require_dependency会对性能有什么影响?

不过,我想知道如果我使用了一些不同的方法在那里会发生什么(见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目录中的文件更改时重新启动开发服务器。

看起来发展表现会受到轻微影响,这对我来说并不是什么大事。生产环境中的性能会受到怎样的影响?无论如何,如果你在生产中,所有的文件通常只能加载一次?有没有更好的方式,我没有看到?

如果您可以包括一些资源,我可以阅读更多关于此,他们将不胜感激。一些博客文章称,最近Rails 3为了自动重新载入lib/*文件而改变了这种行为,并且这种行为很有争议,但是我没有看到这些讨论的任何链接。这将有助于考虑利弊。谢谢!

回答

4

默认情况下,代码重新加载器在生产中处于禁用状态。所以如果你在一个文件的顶部调用require_dependency,它只会被执行一次。

你提到的Rails 3变化真的很小。您通常可以拨打Foo,它将自动从app/models/foo.rb加载。之前它也可以从lib/foo.rb加载。 (这些目录app/modelslib被称为自动加载路径。)Rails团队决定在第三个版本中从自动加载路径中删除lib。你仍然可以放回去。但是我们鼓励在lib中减少频繁更改和项目特定的文件。如果你有一些不属于像app/models或app/controllers这样的默认app子目录,你不必将它放在lib中。你可以添加你自己的子目录。例如,我有app/presenters。旧问题跟踪器上有a discussion,如果您想了解更多信息。

相关问题