我在控制器中看到对创建操作的请求非常慢(所有其他操作都在可接受的限制内)。记录日志告诉我,视图和活动记录虽然不是最快,但只是总加载时间的一小部分。这就是我所看到的:
Completed 200 OK in 37023ms (Views: 530.1ms | ActiveRecord: 251.2ms | Sphinx: 0.0ms)
有没有办法看到余下的时间花在哪里?我试过Mini Profiler,但它并没有告诉我花费的时间。
为了添加一些额外的上下文,模型(Story)有一个has_many:through,它将它连接到User模型。似乎只有在将用户分配到故事时才会出现减速。如果未选择任何用户,则响应时间正常。问题可能是缺少连接模型上的索引吗?
答案 0 :(得分:0)
我的一个做法是为您的操作添加日志。 e.g。
def some_action_which_is_very_slow
logger.debug "== line 1, #{Time.now}"
# statement 1
logger.debug "== line 2, #{Time.now}"
# statement 2
logger.debug "== line 3, #{Time.now}"
# statement 3
end
P.S。使用#{Time.now}是不够智能的。您应该配置日志文件以支持时间格式。我建议使用log4r。看到这个堆栈帖子:How to configure Log4r with Rails 3.0.x?
答案 1 :(得分:0)
使用这样的基准:
def some_action
benchmark 'running queries' do
# some code for running queries
end
benchmark 'some other operation' do
# some other code
end
end
您将在developement.log中获得结果。您也可以在视图中使用它:
<% benchmark 'some partial' do %>
<div>copde here</div>
<% end %>