2011-02-14 72 views
5

我有一個很大的看法,需要很長時間才能完成呈現內容。最好的方法是怎樣進行配置的,哪部分視圖佔用最多的時間?我已經閱讀了關於ruby-prof的內容,但我不確定在哪裏放置它來剖析視圖渲染。如果存在其他選項,我也想知道它們。Rails中的剖析視圖

+2

日誌告訴每個部分渲染多少。你可以拆分你的視圖來檢查。 – apneadiving 2011-02-14 19:29:51

回答

0

如果您沒有這樣做,請首先在應用程序文件夾中檢查文件夾log。它包含您的應用程序的每個環境的日誌文件。

爲了剖析一個Rails應用程序,把你的測試文件夾your_app/test/profile

http://ruby-prof.rubyforge.org/

+2

這不提供有關視圖的哪一部分花費最多時間的信息,並且應用程序的環境/日誌只給出粗略時間,例如多長時間進行部分渲染。 – astropanic 2011-02-14 09:01:17

1

和NewRelic的日誌是有幫助的,但有時你需要更多。 NewRelic確實有一個免費的工具,可以幫助你在本地挖掘,像ruby-prof這樣的工具會給你提供信息,但是很難知道如何處理它。

我在客戶端的應用程序中發現了一個註冊頁面,其速度很慢,原因不明。日誌證實它很慢,並且緩慢不是由於數據庫引起的,但並沒有幫助我看清問題所在。

https://github.com/brynary/rack-bug/

是很容易,紅寶石教授使用,並且可以開啓/關閉迅速,當你需要潛入東西被打開。我一直在幫助人們調整Rails應用程序時使用它。它幫助我瞭解哪個部分很慢,並且有一點試驗和錯誤,我發現它是註冊頁面上時區的下拉菜單

在一頁上它是(緩慢版本): <%= time_zone_select:用戶,:的time_zone,TZInfo :: Country.get( 「US」)區,{}%>

和另一個是: <%= f.time_zone_select:的time_zone,的ActiveSupport :: TimeZone.us_zones, :默認=>「太平洋時間(美國&加拿大)」%>

我的前/後數字:

orig template render   1392.91 
fixed template render   165.56 
fixed on REE instead of 1.8.7 100.70 

我沒有進一步挖掘,因爲我有其他問題需要解決,但可以緩存時區並獲得更快的響應。

+1

你是如何解決這個問題的?我們也看到了同樣的情況 - 我們的應用中有4個頁面呈現時區(僅限美國),並且它們的渲染持續時間超過1200毫秒。把線路拿出來,就好像總共140ms。 – 2012-10-02 15:01:37

+0

我剛剛使用了ActiveSupport :: TimeZone.us_zones而不是TZInfo :: Country.get(「US」)。zones。 – 2012-10-02 19:57:22

3

這其實很簡單。我剛剛發現並修復了使用ruby-prof的HAML模板的性能問題。模板的相關部分看起來是這樣的:

- @collection.each do |x| 
    = render :partial => 'name', :locals => {:object => x} 

我確信ruby-prof是在Gemfile中暫時改變了到:

- require 'ruby-prof' 
    - RubyProf.start 
    - @collection.each do |x| 
    = render :partial => 'name', :locals => {:object => x} 
    - result = RubyProf.stop 
    - printer = RubyProf::CallStackPrinter.new(result) 
    - file = File.open('profile.html', 'w') 
    - printer.print(file) 
    - file.close 

然後啓動應用程序,打的頁面幾次,並在我的瀏覽器中打開新創建的profile.html以查看哪個部分導致了問題。

8

快速進入瓶頸的最簡單方法是使用NewRelics Developer模式,該模式在本地工作。

  1. 請確保您的Gemfile中有ruby-profnewrelic_rpm
  2. 導航到localhost:3000/newrelic,並開始分析(在右邊欄)
  3. 做一個實際的要求,要分析,可能多次,以確保你沒有衡量一些緩存&東西你的應用程序的頁面。
  4. 導航回到newrelic開發人員模式,選擇請求跟蹤。
  5. 按「自我」列對錶格進行排序。這是至關重要的,因爲默認按總時間排序是誤導性的。
  6. 看看前10名電話,他們是如何呼叫,你可能會發現瓶頸。

聲明:我已將此排序功能推送到newrelic的開發人員模式,所以我有偏見。然而,如果你自己嘗試。