代码之家  ›  专栏  ›  技术社区  ›  salt.racer

配置rails控制器操作

  •  30
  • salt.racer  · 技术社区  · 16 年前

    在Ruby on Rails中分析控制器操作的最佳方法是什么。现在我用的是猛力投掷的方法 puts Time.now 我认为这将是一个瓶颈。但那感觉真的,真的很脏。一定有更好的办法。

    5 回复  |  直到 10 年前
        1
  •  40
  •   Rob Davis    5 年前

    不久前我学会了这项技术,发现它非常方便。

    当它就位后,您可以添加 ?profile=true 指向任何命中控制器的URL。您的操作将像往常一样运行,但它不会将呈现的页面交付给浏览器,而是发送一个详细的、格式良好的ruby prof页面,显示您的操作在哪里花费了时间。

    首先,将ruby prof添加到Gemfile中,可能是在开发组中:

    group :development do
        gem "ruby-prof"
    end
    

    然后添加 around filter 致应用程序控制器:

    around_action :performance_profile if Rails.env == 'development'
    
    def performance_profile
      if params[:profile] && result = RubyProf.profile { yield }
    
        out = StringIO.new
        RubyProf::GraphHtmlPrinter.new(result).print out, :min_percent => 0
        self.response_body = out.string
    
      else
        yield
      end
    end
    

    阅读ruby教授的输出有点艺术,但我将把它作为一个练习。

    ScottJShea的补充说明: 如果要更改测量类型,请放置以下位置:

    RubyProf.measure_mode = RubyProf::GC_TIME #example

    if 在应用程序控制器的配置文件方法中。您可以在 ruby-prof page . 在写这篇文章的时候 memory allocations 数据流似乎已损坏( see defect ).

        2
  •  9
  •   Chris Bunch    16 年前

    使用基准标准库和Rails中可用的各种测试(单元、功能、集成)。下面是一个例子:

    def test_do_something
      elapsed_time = Benchmark.realtime do
        100.downto(1) do |index|
          # do something here
        end
      end
      assert elapsed_time < SOME_LIMIT
    end
    

    所以在这里我们只需要做100次,通过基准库来计时,并确保所花的时间少于一些限制时间。

    您还可能会发现这些链接很有用: Benchmark.realtime reference 以及 Test::Unit reference . 另外,如果你喜欢“读书”的话,我从 Agile Web Development with Rails ,其中讨论了所有不同的测试类型和一些性能测试。

        3
  •  9
  •   Todd Smith    16 年前

    有一个关于轮廓的铁路骗局很值得一看

    http://railscasts.com/episodes/98-request-profiling

        4
  •  1
  •   John Topley    16 年前

    你可能想把 FiveRuns TuneUp 服务一试,因为它真的很令人印象深刻。 免责声明:我与FiveRuns没有任何联系,我只是试过这个服务。

    TuneUp是一项免费服务,您可以下载插件,当您运行应用程序时,它会在屏幕顶部插入一个面板,该面板可以展开以显示详细的性能指标。

    它提供了一些很好的图表,包括一个显示在模型、视图和控制器中花费的时间比例的图表。如果需要,您甚至可以向下钻取查看ActiveRecord正在执行的各个SQL查询,它还可以通过另一次单击向您显示底层数据库模式。

    最后,您可以选择将分析数据上载到FiveRuns站点,以进行社区性能分析和建议。

        5
  •  -1
  •   Minqi Pan    9 年前

    在Rails 4.2.6中工作:

        o=OpenStruct.new(logger: Rails.logger)
        o.extend ActiveSupport::Benchmarkable
        o.benchmark 'name' do
          # ... your code ...
        end