默认 rails controller#action 执行时间是否可靠且正确?

Is default rails controller#action execution time reliable and correct?

为了测试我的执行时间,我使用了这段代码:

ActiveSupport::Notifications.subscribe 'process_action.action_controller' do |*args|
  event = ActiveSupport::Notifications::Event.new(*args)
  puts "Event received: #{event.duration}"
end

对于一个需要 137 毫秒的请求,它只显示 34 毫秒,但我在 postman 和 pingdom 中看到它需要 137 毫秒。

那么剩下的 100 毫秒时间用在哪里了?

见截图:

它说请求用了 25 毫秒,但是在 post man 中用了 90 毫秒,那么剩下的 65 毫秒去了哪里?

我知道这是因为网络和互联网速度对于完整渲染也很重要。

我只是想确认这是正确的时间还是这里遗漏了什么,例如,如果 ApplicationController 有一个过滤器:

before_action :method_name

那么它是同时考虑操作 "method_name" 还是仅考虑当前操作?

So where is rest of the 100ms time taking?

延迟。请求从邮递员(或 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

这也包括花在过滤器上的时间。