【问题标题】:What is Rails doing after it logs 200 OK? (Debugging slow response time)Rails 在记录 200 OK 后在做什么? (调试响应时间慢)
【发布时间】:2015-01-09 18:52:36
【问题描述】:

我正在尝试在我的 Ruby on Rails 应用程序中调试极其缓慢的请求调用。我已经设法根据自己的喜好优化控制器方法,Rails 的日志告诉我它已经在 XX 毫秒 (Completed 200 OK in 5049ms (Views: 34.9ms | ActiveRecord: 76.3ms)) 内完成了操作。但是,当页面加载时,此消息会在浏览器中实际呈现之前 long 打印出来;最长约 15 秒的等待时间。 Rack mini-profiler 证实了这一点,告诉我 GET 操作(不计算完成控制器操作所花费的时间)花费了 14 秒左右。 (分析器还确认控制器动作的执行时间在 5 秒左右)。

控制器操作需要 5 秒左右的时间我很好,因为我可以对我的代码的各个部分进行基准测试,并清楚地了解什么是缓慢的以及为什么。我完全不明白为什么会存在这种神秘的滞后时间。它在做什么?

【问题讨论】:

  • 一个 5 秒的动作是它应该做的 500 倍——你是在那个动作中做一些计算密集的事情,还是你有可能影响整个应用程序?你有任何非标准的中间件吗?你遇到交换了吗?硬盘是否遇到错误?
  • 会不会和渲染结果的size有关?在 5 秒内你可以构建相当多的输出,可能开销是由结果的序列化造成的,并将其写入套接字......

标签: ruby-on-rails ruby lag


【解决方案1】:

资产

主要原因可能是资产加载。你在开发环境中吗?默认情况下资产没有预编译(我相信资产缓存也是关闭的)

也许您没有看到相关的 GET 请求,因为您使用了 gem 'quiet-assets'。看到所有对资产 (javascript/css) 的 GET 请求让我感到非常厌倦,所以我把这个 gem 放在我的 Gemfile 中并忘记了一段时间。但是接下来还有很多事情要做。

服务资产可能非常非常长。例如,我正在使用一些 jquery ui,一开始我在 application.js 中调用 //require jquery.ui.all。原来它实际上只为 jquery.ui 发送了几十个文件。即使文件很小并且服务非常快,连续的 GET 请求/回复之间也会有一些延迟,这是我在 localhost/development 中的应用程序响应时间过慢的原因

您不想在开发中预编译资产,但可以摆脱无用的(如果您使用的是 jquery,很可能只需要几个文件,而不是全部)

在预编译资产的测试/生产中,我的服务器响应时间快了 10-100 倍。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-24
    • 1970-01-01
    • 2011-10-27
    • 2019-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多