Rails 控制器还在做什么?

what else is the Rails controller doing?

我有一个 Rails 4.2 应用程序正在打印运输标签。 New Relic instrumentation 显示它在控制器中花费了 35% 的时间(不包括控制器方法的操作),我不明白为什么。应用流程很简单:

  1. 验证用户
  2. 构建 AR 对象
  3. 验证地址(外部微服务调用)
  4. 计算价格
  5. 在 Redis 中生成跟踪号
  6. 坚持 AR 到 PG
  7. 生成跟踪号
  8. 生成响应

第 1 步使用查询 PG 的 Devise 完成。第 2 步到第 8 步包含在 LabelsController#generate 中(更准确地说是控制器调用的服务 class)。

New Relic 追踪显示了所有这些步骤以及它们花费的时间。它显示 LabelsController#generate 需要 229ms - 但没有 CalculatePrice(138ms)、DrawLabel(118ms)等,即使 #generate 调用 CalculatePrice、DrawLabel 等。这只是 New Relic 分解自定义跟踪的方法。如果我不向所有这些添加特定的自定义跟踪,那么它将在 #generate 下正确地聚合 CalculatePrice、DrawLabel、ValidateAddress 等(这将接近 800ms)。所以...如果我已经检测了#generate 中的所有步骤,控制器还做了什么花费这么长时间(除了执行操作方法的主体)?这是 Rails 锁定发生的地方吗?我认为那是在其中一个中间件中。

这是在一个服务器实例上仅跟踪 1 个请求。

在我添加了更多检测之后,控制器中调用了另外 33%:JSON 模式验证和 Devise 身份验证。