當我運行慢Rails堆棧
軌服務器
或
耙-T
或其他一些軌道腳本,它需要大量的時間約1分鐘。 什麼是確定究竟如此緩慢的最佳方式? 速度如何提高?
Rails的v是3.0.3運行低谷紅寶石1.9.2(RVM) - Linux的
當我運行慢Rails堆棧
軌服務器
或
耙-T
或其他一些軌道腳本,它需要大量的時間約1分鐘。 什麼是確定究竟如此緩慢的最佳方式? 速度如何提高?
Rails的v是3.0.3運行低谷紅寶石1.9.2(RVM) - Linux的
正在打擾我也,因爲我已經切換到Rails 3
你的第二個問題:我發現通過挖掘框架,初始化程序在實際開始執行任務之前,需要花費大約一次簡單的rake或rails調用的一半時間。
如果你把這些簡單的計時線到初始呼叫的$GEM_PATH/gems/railties-3.0.3/lib/rails/initializable.rb
循環(或者,如果你喜歡背馱式吧):
def run_initializers(*args)
return if instance_variable_defined?(:@ran)
t0 = Time.now
initializers.tsort.each do |initializer|
t = Time.now
initializer.run(*args)
puts("%60s: %.3f sec" % [initializer.name, Time.now - t])
end
puts "%60s: %.3f sec" % ["for all", Time.now - t0]
@ran = true
end
編輯:或者,railties 4.2.1:
def run_initializers(group=:default, *args)
return if instance_variable_defined?(:@ran)
t0 = Time.now
initializers.tsort.each do |initializer|
t = Time.now
initializer.run(*args) if initializer.belongs_to?(group)
puts("%60s: %.3f sec" % [initializer.name, Time.now - t])
end
puts "%60s: %.3f sec" % ["for all", Time.now - t0]
@ran = true
end
...你可以跟進會發生什麼。在我的系統上,這是一款2.4 Core 2 Duo MacBook,初始化程序大約需要7秒。
有一些在我的系統上特別慢。當我全部過濾掉低於第二,我得到我的系統上這個結果:
load_active_support: 1.123 sec
active_support.initialize_time_zone: 1.579 sec
load_init_rb: 1.118 sec
set_routes_reloader: 1.291 sec
我相信有人(是我嗎?)還需要一段時間,開始有和優化。
[Rails 1.9.3-p327](http://rubyinstaller.org/)改進了這個_a lot_。 – lambinator 2012-12-05 16:54:34
@lambinator你的意思是** Ruby ** 1.9.3-p327? – evanrmurphy 2013-09-20 21:14:47
我用robokopp
的提示來發現大部分時間都在build_middleware_stack
和load_config_initializers
步驟中用於我。這是因爲我使用的是添加中間件的gem,可能有很多初始化步驟。我在Rails 3.1.rc1上,我的初始化需要將近13秒(我在Ruby 1.9.2p180上)。
即使對於全新的rails 3.1.rc1應用程序,初始化也需要3.6秒,最大耗時load_config_initializers
。
因此,我建議你尋找寶石/你自己的代碼有重型初始化或添加太多的中間件。
我使用的一種解決方法是預加載軌道環境,使用rails-sh。這樣,只有第一個rails/rake命令很慢,其餘的都很快。在this question寫了一個更全面的答案。
我最近嘗試的另一種方法是與第一種方法兼容的是安裝補丁ruby(使用rvm或rubyenv或源代碼)並調整環境變量(請參閱@stwienert的答案)。獵鷹補丁和railsexpress補丁似乎在紅寶石1.9中顯示出顯着的性能。查看rvm/rubyenv關於如何安裝補丁的紅寶石。
我們的Rails 3.1的啓動時間幾乎一分鐘(有很多的寶石)
然後,我們發現了在Reddit上的一些紅寶石1.9.3優化選項: http://www.reddit.com/r/ruby/comments/wgtqj/how_i_spend_my_time_building_rails_apps/c5daer4
export RUBY_HEAP_MIN_SLOTS=800000
export RUBY_HEAP_FREE_MIN=100000
export RUBY_HEAP_SLOTS_INCREMENT=300000
export RUBY_HEAP_SLOTS_GROWTH_FACTOR=1
export RUBY_GC_MALLOC_LIMIT=79000000
把這個在你的shell環境/ profile/bashrc中,你就完成了。
我們將啓動時間從1分鐘提高到了9秒
您在哪個平臺上工作? Linux呢?蘋果電腦?另外,請定義「很多時間」... 20秒? 2分鐘? – 2010-12-16 14:32:51
是的,我剛剛在Windows 7上啓動了Rails教程,並安裝了Rails 3.1.1,'rake -T'需要11秒才能執行! – 2011-10-30 01:21:44