Rails 控制器还在做什么?
what else is the Rails controller doing?
我有一个 Rails 4.2 应用程序正在打印运输标签。 New Relic instrumentation 显示它在控制器中花费了 35% 的时间(不包括控制器方法的操作),我不明白为什么。应用流程很简单:
- 验证用户
- 构建 AR 对象
- 验证地址(外部微服务调用)
- 计算价格
- 在 Redis 中生成跟踪号
- 坚持 AR 到 PG
- 生成跟踪号
- 生成响应
第 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 身份验证。
我有一个 Rails 4.2 应用程序正在打印运输标签。 New Relic instrumentation 显示它在控制器中花费了 35% 的时间(不包括控制器方法的操作),我不明白为什么。应用流程很简单:
- 验证用户
- 构建 AR 对象
- 验证地址(外部微服务调用)
- 计算价格
- 在 Redis 中生成跟踪号
- 坚持 AR 到 PG
- 生成跟踪号
- 生成响应
第 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 身份验证。