2012-01-13 4 views
0

큰 Rails 3.1 애플리케이션이 있습니다. 개발 속도가 느려집니다. 클래스 자동로드를 느리게하는 문제의 일부를 추적했습니다. 내 시스템에는 두세 가지 모델이 있으며 약 130 개의 보석을 사용하고 있습니다. .Rails 클래스 로딩 속도가 느린 이유는 무엇입니까?

을 내 컨트롤러는 페이지의로드가 내 모델들과 함께 그냥이를 위해 거의 1 초 걸릴 수 있습니다 즉

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

글쎄, 그건 당신이 당신의를 다시 시작할 필요가 없습니다 있도록, 당신의 코드를 다시로드, 개발 모드가하는 일입니다 에버.

0

이것은 개발 환경에서 실행될 때 사용자가 취할 수있는 트레이드 오프입니다. 성능이 나빠지는 대신에 자동로드 (개발할 때 매우 유용합니다)를 얻습니다. 프로덕션 환경에서는 자동 로딩 (autoloading)을 사용하여 더 나은 성능을 얻을 수 있습니다 (이는 어쨌든 프로덕션 환경에서 유용하지는 않습니다).

0

이것은 개발 모드에서 작업 할 때 자동 클래스 재로드로 인한 것입니다. 이는 우리가 코드를 변경하고 페이지를 새로 고치는 부분을 쉽게 만듭니다. 이 동작은 config/environment/development.rb 파일의 config.cache_classes에 의해 규율됩니다.

# 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_classesfalse로 설정하면, 레일의 클래스 로딩에 대한 사용자 load 문을 것입니다. true로 설정하면 대신 require 문을 사용합니다.

이것은 앱에로드해야하는 모든 파일과 관련이 있습니다. rails console로 이동하여 $LOAD_PATH을 입력하여이를 확인할 수 있습니다. 나는 당신이 그것의 톤을 가지고 있다고 확신합니다.

관련 문제