繁体   English   中英

应用程序加速Ruby on Rails

[英]Application Speed up for Ruby on Rails

我有一个控制器动作,需要10秒才能运行。 大部分时间都花在一个大文件的视图中(超过1500行)。 我该如何调试速度问题?

Yu可以试试NewRelic 我几年前使用过免费版本,你可以看到整体性能,特别是慢速调用非常好。
据我记得你只需安装一个宝石,配置一些东西,这是很好的去。

Ruby和Rails具有可以帮助您的基本分析工具。 看看这个Rails指南: 性能测试Rails应用程序

该页面描述了如何编写用于基准测试的测试用例,以防止性能回归以及如何进行性能分析,这可能很简单:

rails profiler 'Ruby.code.to.run'

如果这不适合你,那么考虑使用New Relic 但我还要看一下Rack-Bug (顺便说一句,它有一个Rails 3Rails 3分支 )。 Rack-Bug是一个调试工具栏,它为您提供了许多关于请求中花费时间的精彩指标,并且它在浏览器中直接执行,以及正常响应,因此它是最不痛苦的。

现在,你所做的是错的:

  • 你应该避免胖视图,因为胖视图很难测试,难以调试和难以分析
  • 您应该避免Web进程中的慢代码,因为它会阻止其他客户端访问您的Web服务器,而是将所有逻辑移出到异步作业队列中

因此,请考虑将此处理移动到作业队列中。 Delayed_job非常可靠,维护得当,可以与Rails 3一起使用。

因此,您的观点将注册一份新工作并返回。 当工作完成后,你会在某个地方设置一个标志。 然后通过特殊的API调用,您可以每隔几秒从客户端Javascript检查其完整性。 一旦完成,您可以再次从Javascript显示结果,重定向或开始下载或其他任何内容。

如果以上不是一个选项(也许这是一个显示应该是即时报告的页面),您应该考虑的第一个瓶颈是执行的SQL查询,因此熟悉MySQL的DESCRIBE命令(或PostgreSQL的EXPLAIN )。 通过这种方式可以轻松查看索引所在的位置。

NewRelic是分析应用程序的最佳方式。

通过以下几点,您可以修改代码以加快应用程序的速度。

  • N + 1查询问题
  • 测试N + 1
  • 嵌套的渴望加载
  • 间接急切加载
  • Rails分组和聚合计算

我建议将您的视图的一小部分包装到benchmark块中,并在log / development.log中查看哪些部分是缓慢的。

<% benchmark "Showing users" do %>
  <!-- ... -->
<% end %>

<% benchmark "Performing some calculations" do %>
  <!-- ... -->
<% end %>

最好的情况是你找到一些花费90%时间的地方。 然后,您可以使用它们来显着提高性能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM