복붙노트

[RUBY-ON-RAILS] 레일 3 - 속도 콘솔로드 시간까지

RUBY-ON-RAILS

레일 3 - 속도 콘솔로드 시간까지

30 초에 접근하기 시작 내 콘솔로드 시간을 단축 할 수있는 비교적 쉬운 방법이 있는지 궁금입니다. 나는 다시로드에 의해 영향을받을 것 같지 않는 서브 클래스 방법을 많이 가지고 있어요! 그래서 나는 열고 콘솔 많이 닫기를 끝낸다. IRB로드 번개 빠른.

나는 너무 많은 보석을 가지고 있습니까? 어떻게 내가 가장 많은 시간을 차지하고 있는지 볼 수 있도록로드 작업 타이밍 가야합니까? 당신이 볼 수 있듯이, 이미 아무 소용 dev에 부스트 보석을 시도했습니다. 이 앱은 승객에 괜찮습니다, 그냥 콘솔로드의 그 버그 나 밖으로 쓰레기. 2.4 및 4 기가 바이트 RAM과 MBP OSX 10.6.6에서 실행. RVM을 사용하지 않습니다.

버전 :

Ovid$ rails -v
Rails 3.0.3
Ovid$ ruby -v
ruby 1.9.2p136 (2010-12-25 revision 30365) [x86_64-darwin10]

기억:

Ovid$ vm_stat
Mach Virtual Memory Statistics: (page size of 4096 bytes)
Pages free:                         118818.
Pages active:                       341320.
Pages inactive:                      99490.
Pages speculative:                  310576.
Pages wired down:                   112527.
"Translation faults":             23097323.
Pages copy-on-write:               1270961.
Pages zero filled:                13836659.
Pages reactivated:                      36.
Pageins:                            165761.
Pageouts:                                0.
Object cache: 28 hits of 760846 lookups (0% hit rate)

Gemfile :

source 'http://rubygems.org'

gem 'rails', '3.0.3'
gem 'mysql2'
gem 'foreigner'
gem 'haml'
gem 'capistrano'
gem 'nokogiri'

#web services
gem 'yammer4r'
gem 'ruby-freshbooks'

#authentication gems from nifty generator
gem "bcrypt-ruby", :require => "bcrypt"
gem "mocha", :group => :test
gem 'authlogic'

#dev
group :development do
  gem 'rails-dev-boost', :git => 'git://github.com/thedarkone/rails-dev-boost.git', :require => 'rails_development_boost'
end

#testing
group :test do
  gem 'database_cleaner'
  gem 'cucumber-rails'
  gem 'cucumber'
  gem 'rspec-rails'
  gem 'spork'
  gem 'launchy'
  gem 'machinist'
  gem 'faker'
  gem 'capybara'
end

대단히 감사합니다!

해결법

  1. ==============================

    1.나는 마지막으로 벤치 마크를 사용하여 내 시작 병목 현상을 발견했다. 특히, / 들러 / runtime.rb 들러 보석 및 lib 디렉토리의 탐색은, Kernel.require을 수행하는 라인을 찾아이처럼 포장 :

    나는 마지막으로 벤치 마크를 사용하여 내 시작 병목 현상을 발견했다. 특히, / 들러 / runtime.rb 들러 보석 및 lib 디렉토리의 탐색은, Kernel.require을 수행하는 라인을 찾아이처럼 포장 :

    puts Benchmark.measure("require #{file}") {
      Kernel.require file
    }.format("%n: %t %r")
    

    당신은 설정 / boot.rb에서 같은 앱에서 '벤치 마크'어딘가를 필요로 추가 할 수 있습니다. 즉, 각각의 보석을 필요로하는 데 걸리는 시간을 보여줍니다. 나는 결과 내 일치합니다 보장 할 수는 없지만 대부분의 서브 밀리 초에 비해로드하는 초 인수 한 몇 가지 보석을했다. 몇 내가 개발에 필요하지 않았다 보석이었다하지만, 예를 들어, 개발 환경에서 일부 작업에 필요한 않았다 카피 스트라 노, 했어야. 나는 시작 (초기화 등)의 다른 지역을 벤치마킹하지만 상당한 병목 현상을 찾을 수 없습니다.

    아직에만이 정말 필요한 작업들을로드 할 응용 프로그램을 구성 할 수있는 깨끗한 방법을 생각하지 않았습니다. 내가 그 보석을하지 않아도 알고있을 때 시작에 신속하고 사용 RAILS_ENV = 빠른 레일 S / C : 아마, 나는라는 환경을 만들 수 있습니다. 어떤 경우에 그 보석을 제외 빠른 : 다음 Gemfile에, 나는 그룹을 사용할 수 있습니다.

    말했다 모두는 나에게 가장 큰 시작 성가심은 레이크 작업을 실행하는 전체 환경을로드하는 데있다. 나는 아마 가장 보석을 제외 할 수 있지만이 경우 그것의 가치가 그것을 알고하지 않도록 Gemfile은 혼란을 얻을 시작합니다.

  2. ==============================

    2.약간 복사하여 붙여 넣을 수있다 형태 적응 모두 필요하며, 정렬 출력을 제공 랩

    약간 복사하여 붙여 넣을 수있다 형태 적응 모두 필요하며, 정렬 출력을 제공 랩

    # Add this to the top of boot.rb
    require 'benchmark'
    def require(file)
      puts Benchmark.measure("") {
        super
      }.format("%t require #{file}")
    end
    

    그런 다음 당신이 그들을 볼 수없는 조합을 실행할 수 있습니다 :

    rails runner 1
    

    또는 그 (것)들을 정렬하고 상위 50를 보여줍니다

    rails runner 1 | sort -nr | head -n 50
    
  3. ==============================

    3.당신은 추가하여 속도를 높일 수 : 느린 Gemfile 항목에 => nil이 필요하고 수동으로 필요합니다. 예를 들면

    당신은 추가하여 속도를 높일 수 : 느린 Gemfile 항목에 => nil이 필요하고 수동으로 필요합니다. 예를 들면

    gem 'jammit', :require => nil
    

    나는 또한 내가 했어 만남에서이 문제를 해결. 이것은 루비 1.9.2의 버그 것 같다 (이 패치의 의견을 참조하십시오 https://gist.github.com/1008945)

    당신은 1.9.2 헤드 또는 1.9.3 머리에 난 그냥 링크 요점하거나 업그레이드하여 1.9.2 패치로 문제를 해결할 수 있습니다.

  4. ==============================

    4.난 단지 당신의 실험실 코트에 넣고 문제를 양분 제안 할 수 있습니다. 모든 보석의 요구 사항을 주석하는 일을 가속화 경우 (것 또한 그 보석에 의존하는 코드 조각을 주석 포함 아마도 있음)를 참조하십시오. 그렇다면, 한 번에 등 절반을 주석 처리합니다.

    난 단지 당신의 실험실 코트에 넣고 문제를 양분 제안 할 수 있습니다. 모든 보석의 요구 사항을 주석하는 일을 가속화 경우 (것 또한 그 보석에 의존하는 코드 조각을 주석 포함 아마도 있음)를 참조하십시오. 그렇다면, 한 번에 등 절반을 주석 처리합니다.

    죄송합니다 이것은 진짜 대답이 아닌 .. 당신은 레일 러너와 함께 호출하고 무 조작 스크립트에 의해, 예를 들어, 내가 생각 루비 교수 시도 할 수 있습니다.

    내가 루비 교수 스크립트를 시도 / 레일 러너 '전무'내 맥에 있지만 추락 단지가있는 것 같습니다 :-)

    편집하다

    앱에 대한 자식을 사용하는 경우 당신은 너무 양분 명령의 시도 할 수 사물 느린 왔을 때 특정 지점이 시간이 있다면 오히려 단지 일반 팽창보다 참조하십시오.

  5. ==============================

    5.이 병목 현상을 코드를 청소 및 식별에 대해 확실히, 그러나 당신이 그 절감했습니다 일단은 dev에 시간을 속도를 제우스 같은 것을 보는 가치입니다.

    이 병목 현상을 코드를 청소 및 식별에 대해 확실히, 그러나 당신이 그 절감했습니다 일단은 dev에 시간을 속도를 제우스 같은 것을 보는 가치입니다.

    gem install zeus
    

    https://github.com/burke/zeus (문서)

    그것은 버그없이 아니에요 때로는 재부팅을 필요로 않습니다하지만, 난 여전히 작은 코드 변경 후 빠른 서버 및 콘솔 재부팅하여 개발 시간의 전반적인 증가를보고하고있다.

  6. ==============================

    6.다시로드! 지금 약간의 시간에 대한 문제가되고있다. 이것 좀 보라. 당신이 사용할 수있는 몇 가지 패치와 당신이 아마 수 문제를 해결하기 위해 방법에 대한 몇 가지 도움말이 있습니다.

    다시로드! 지금 약간의 시간에 대한 문제가되고있다. 이것 좀 보라. 당신이 사용할 수있는 몇 가지 패치와 당신이 아마 수 문제를 해결하기 위해 방법에 대한 몇 가지 도움말이 있습니다.

    재로드 방법 자체는 다음과 같습니다.

    # reloads the environment
    def reload!(print=true)
      puts "Reloading..." if print
      ActionDispatch::Callbacks.new(lambda {}, false).call({})
      true
    end
    

    당신은 항상 기능을 재정의하는이 방법 당신에게 환경을 추가하고 필요한 다시로드를 강제 할 수있다.

    나를 이렇게 당신을 위해 작동하는지 알려 주시기 위해이 근무하고있다. 모두 제일 좋다.

  7. from https://stackoverflow.com/questions/4736546/rails-3-speed-up-console-loading-time by cc-by-sa and MIT license