我有一個很大的看法,需要很長時間才能完成呈現內容。最好的方法是怎樣進行配置的,哪部分視圖佔用最多的時間?我已經閱讀了關於ruby-prof的內容,但我不確定在哪裏放置它來剖析視圖渲染。如果存在其他選項,我也想知道它們。Rails中的剖析視圖
回答
如果您沒有這樣做,請首先在應用程序文件夾中檢查文件夾log
。它包含您的應用程序的每個環境的日誌文件。
爲了剖析一個Rails應用程序,把你的測試文件夾your_app/test/profile
這不提供有關視圖的哪一部分花費最多時間的信息,並且應用程序的環境/日誌只給出粗略時間,例如多長時間進行部分渲染。 – astropanic 2011-02-14 09:01:17
和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
我沒有進一步挖掘,因爲我有其他問題需要解決,但可以緩存時區並獲得更快的響應。
你是如何解決這個問題的?我們也看到了同樣的情況 - 我們的應用中有4個頁面呈現時區(僅限美國),並且它們的渲染持續時間超過1200毫秒。把線路拿出來,就好像總共140ms。 – 2012-10-02 15:01:37
我剛剛使用了ActiveSupport :: TimeZone.us_zones而不是TZInfo :: Country.get(「US」)。zones。 – 2012-10-02 19:57:22
這其實很簡單。我剛剛發現並修復了使用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
以查看哪個部分導致了問題。
快速進入瓶頸的最簡單方法是使用NewRelics Developer模式,該模式在本地工作。
- 請確保您的Gemfile中有
ruby-prof
和newrelic_rpm
。 - 導航到
localhost:3000/newrelic
,並開始分析(在右邊欄) - 做一個實際的要求,要分析,可能多次,以確保你沒有衡量一些緩存&東西你的應用程序的頁面。
- 導航回到newrelic開發人員模式,選擇請求跟蹤。
- 按「自我」列對錶格進行排序。這是至關重要的,因爲默認按總時間排序是誤導性的。
- 看看前10名電話,他們是如何呼叫,你可能會發現瓶頸。
聲明:我已將此排序功能推送到newrelic的開發人員模式,所以我有偏見。然而,如果你自己嘗試。
- 1. Rails ActiveRecord數據剖析
- 2. 深度剖析可視化
- 3. 什麼是在Django中剖析視圖的最佳方式?
- 4. 剖析
- 5. 剖析圖形着色器
- 6. ruby中的剖析器
- 7. OWIN Startup的剖析
- 8. Node.js的CPU剖析
- 9. 使用NVIDIA可視化剖析器剖析MATLAB mex CUDA應用程序
- 10. 回傳剖析
- 11. Django剖析
- 12. Spring Boot剖析
- 13. 剖析.net庫
- 14. Python剖析
- 15. 在Nutch中剖析Lucene
- 16. 剖析在Visual Studio中環
- 17. 剖析CSV在JavaScript中,每
- 18. 有沒有什麼辦法來剖析ASP.NET MVC中視圖的性能?
- 19. 剖析Ruby代碼
- 20. 剖析vCard JSON C#
- 21. 剖析OpenCL內核
- 22. 剖析XSL性能
- 23. 剖析C + Python(SWIG)
- 24. 剖析豬查詢
- 25. 剖析PHP在線
- 26. 剖析MapReduce作業
- 27. cuda可視化剖析器中的CPU和GPU定時器
- 28. Python的Django的剖析
- 29. Linux的Eclipse CDT剖析器
- 30. Visual Studio的剖析API
日誌告訴每個部分渲染多少。你可以拆分你的視圖來檢查。 – apneadiving 2011-02-14 19:29:51