2011-02-14 74 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的开发人员模式,所以我有偏见。然而,如果你自己尝试。