如何确定什么是减慢我的Rails应用程序

时间:2011-07-12 17:20:36

标签: ruby-on-rails ruby performance refactoring

我的Rails应用程序在开发模式下运行良好(没有缓存),但在生产中很难加载主模型的:show视图。该日志仅显示最多约45毫秒的SQL查询,但实际的渲染时间约为15秒。我正在使用acts_as_ferret和paperclip,但是paperclip只调用after_save循环而不执行任何操作。当时网上只有1或2个用户,所以我不认为我有一个备份队列,但我真的无法缩小网站上的内容。我该怎么做才能更准确地测量服务器端功能,看看什么是备份加载时间?

在:show view

中调用的内容
  • 约12个HABTM列表(标签类型,类别等)
  • 与acts_as_ferret
  • 相关的视频
  • HABTM对视频的评论

这就是它。我应该如何将HABTM称为Rails最佳实践?现在我正在做类似的事情:

<%= @video.tags.map {|t| link_to t.name, path} %>
<%= @video.categories.map {|c| link_to c.name, path} %>
#etc....

我很确定有更好的方法可以做到这一点,我愿意接受建议

2 个答案:

答案 0 :(得分:3)

以下是一些可以确定瓶颈的工具:

  1. http://newrelic.com/ 将分析服务器端的数据库查询时间和红宝石执行时间等内容

  2. http://developer.yahoo.com/yslow/ 将在客户端分析响应时间,渲染时间和javascript等内容

  3. 没有很多给定的代码可以运行,但有一些通常对rails findwhere有帮助的事情:

    1. 使用:includes减少查询次数。
    2. 使用:select而不是选择所有列
    3. 关于这个问题的重要联系:
      http://snippets.dzone.com/posts/show/2089
      http://www.fortytwo.gr/blog/18/9-Essential-Rails-Tips
      http://www.engineyard.com/blog/2009/thats-not-a-memory-leak-its-bloat/

答案 1 :(得分:0)

检查机器

也许在该机器上运行的其他东西都是问题所在。您是否尝试过分析机器 - 例如,运行top来检查CPU使用情况?