2012-01-13 2 views
0

У меня есть более крупное приложение Rails 3.1. В режиме разработки он становится слишком медленным. Я отследил часть проблемы, чтобы замедлить автозагрузку класса. У меня есть пара сотен моделей в моей системе, и я использую около 130 драгоценных камней. .Почему загрузка классов Rails в разработке медленная?

Если мой контроллер не делает ничего, кроме имен классов референтных (т.е.

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

Нагрузка страницы может принимать почти одну секунду, только для этого с некоторыми из моих моделей Журнал выглядит примерно так:

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

Я проверил это с Руби 1.9.2 и 1.9.3.

+1

Похоже, это описано в 3.2. Посмотрите http://weblog.rubyonrails.org/2011/12/20/rails-3-2-rc1-faster-dev-mode-routing-explain-queries-tagged-logger-store – pduey

+0

В частности, Rails 3.2 знает только для перезагрузки классов, которые не изменились. –

ответ

1

Это было в значительной степени зафиксировано в Rails 3.2.

0

Ну, это то, что делает режим развития, он перегружает ваш код, так что вам не придется перезапустить S ервере.

0

Это компромисс, который вы делаете при работе в среде разработки; вы получаете автозагрузку (невероятно полезную при разработке) в обмен на более низкую производительность. В производстве вы получаете лучшую производительность за счет автозагрузки (что не все так полезно для производства, во всяком случае).

0

Это связано с автоматической перезагрузкой классов при работе в режиме разработки, что облегчает нам задачу, когда мы вносим изменения в код и обновляем страницу обновления. Это поведение определяется 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. Уверен, у тебя есть тонны.

Смежные вопросы