[英]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 3的Rails 3分支 )。 Rack-Bug是一个调试工具栏,它为您提供了许多关于请求中花费时间的精彩指标,并且它在浏览器中直接执行,以及正常响应,因此它是最不痛苦的。
现在,你所做的是错的:
因此,请考虑将此处理移动到作业队列中。 Delayed_job非常可靠,维护得当,可以与Rails 3一起使用。
因此,您的观点将注册一份新工作并返回。 当工作完成后,你会在某个地方设置一个标志。 然后通过特殊的API调用,您可以每隔几秒从客户端Javascript检查其完整性。 一旦完成,您可以再次从Javascript显示结果,重定向或开始下载或其他任何内容。
如果以上不是一个选项(也许这是一个显示应该是即时报告的页面),您应该考虑的第一个瓶颈是执行的SQL查询,因此熟悉MySQL的DESCRIBE命令(或PostgreSQL的EXPLAIN )。 通过这种方式可以轻松查看索引所在的位置。
我建议将您的视图的一小部分包装到benchmark
块中,并在log / development.log中查看哪些部分是缓慢的。
<% benchmark "Showing users" do %>
<!-- ... -->
<% end %>
<% benchmark "Performing some calculations" do %>
<!-- ... -->
<% end %>
最好的情况是你找到一些花费90%时间的地方。 然后,您可以使用它们来显着提高性能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.