为了测试执行时间,我使用以下代码:

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时间在哪里呢?

看截图:
ruby-on-rails - 默认的rails controller#action执行时间可靠且正确吗?-LMLPHP

它说请求花了25毫秒,但是邮递员花了90毫秒,那么剩下的65毫秒又去了哪里呢?

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

我只是想确认这是正确的时间,或者此处缺少某些内容,例如,如果ApplicationController具有过滤器:

before_action :method_name


然后,是否还要考虑动作“ method_name”还是仅考虑当前动作?

最佳答案

那么剩下的100ms时间在哪里呢?


潜伏。从您的邮递员(或pingdom)实例到服务器(再返回)的请求花费时间。 Rails服务器无法知道这些延迟(实际上,就它们而言,它们并不存在),因此不包括这些延迟。

关于您的截图:


ruby-on-rails - 默认的rails controller#action执行时间可靠且正确吗?-LMLPHP


它不包含任何before_action或控制器的此类过滤器。因此,如果您的过滤器花费时间,则不会考虑使用它们。

所以你应该使用这个:

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


这还将包括花费在过滤器上的时间。

08-19 00:17
查看更多