为什么开发中的Rails类加载速度慢?

时间:2012-01-13 05:24:16

标签: ruby-on-rails ruby-on-rails-3

我有一个更大的Rails 3.1应用程序。它在开发模式下变得非常慢。我已经找到了部分问题来减慢类自动加载速度。我的系统中有几百个模型,我使用了大约130个宝石。

如果我的控制器除了引用类名之外什么也没做(即

def index
  User
  Order
  Game
  LineItem
  # and so on...
  render :text => ''
end

对于我的一些模型,页面的加载可能需要将近一秒钟。日志看起来像:

Completed 200 OK in 762ms (Views: 3.2ms | ActiveRecord: 3.9ms)

我用Ruby 1.9.2和1.9.3测试了这个。

4 个答案:

答案 0 :(得分:1)

这主要在Rails 3.2中得到修复。

答案 1 :(得分:1)

这是因为在开发模式下工作时自动类重新加载,这使我们更容易,我们更改代码并点击页面刷新。此行为受config.cache_classes文件中config/environment/development.rb的约束。

 # In the development environment your application's code is reloaded on
 # every request. This slows down response time but is perfect for development
 # since you don't have to restart the web server when you make code changes.
 config.cache_classes = false

config.cache_classes设置为false时,Rails会将load语句用于其类加载。设置为true时,它将使用require语句。

这与您在应用中需要加载的所有文件有关。您可以访问rails console并输入$LOAD_PATH来查看此信息。我相信你有很多。

答案 2 :(得分:0)

嗯,这就是开发模式的作用,它会重新加载您的代码,这样您就不必重新启动服务器了。

答案 3 :(得分:0)

这是您在开发环境中运行时的权衡;你得到自动加载(在开发时非常有用)以换取更差的性能。在生产中,您会以牺牲自动加载为代价获得更好的性能(无论如何,这在生产中并不是那么有用)。