为了测试执行时间,我使用以下代码:
ActiveSupport::Notifications.subscribe 'process_action.action_controller' do |*args|
event = ActiveSupport::Notifications::Event.new(*args)
puts "Event received: #{event.duration}"
end
对于一个耗时137ms的请求,它仅显示34ms,但是我在邮递员和pingdom中看到它耗时137ms。
那么剩下的100ms时间在哪里呢?
看截图:
它说请求花了25毫秒,但是邮递员花了90毫秒,那么剩下的65毫秒又去了哪里呢?
我知道这是因为网络和Internet速度对于完整渲染也很重要。
我只是想确认这是正确的时间,或者此处缺少某些内容,例如,如果ApplicationController具有过滤器:
before_action :method_name
然后,是否还要考虑动作“ method_name”还是仅考虑当前动作?
最佳答案
那么剩下的100ms时间在哪里呢?
潜伏。从您的邮递员(或pingdom)实例到服务器(再返回)的请求花费时间。 Rails服务器无法知道这些延迟(实际上,就它们而言,它们并不存在),因此不包括这些延迟。
关于您的截图:
它不包含任何before_action或控制器的此类过滤器。因此,如果您的过滤器花费时间,则不会考虑使用它们。
所以你应该使用这个:
ActiveSupport::Notifications.subscribe 'process_action.action_controller' do |*args|
event = ActiveSupport::Notifications::Event.new(*args)
puts "Event received: #{event.duration}"
end
这还将包括花费在过滤器上的时间。