【问题标题】:what else is the Rails controller doing?Rails 控制器还在做什么?
【发布时间】:2018-03-29 06:03:13
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 渲染视图?
  • 它是一个API,所以它只渲染:json
  • 还需要渲染

标签: ruby-on-rails ruby-on-rails-4 actioncontroller


【解决方案1】:

在我添加更多检测之后,结果是控制器中另外 33% 的调用:JSON 模式验证和设计身份验证。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-06
    • 2022-08-18
    • 2021-06-28
    • 2016-07-02
    • 1970-01-01
    • 1970-01-01
    • 2016-01-27
    • 1970-01-01
    相关资源
    最近更新 更多