我试图在我的 Ruby on Rails 应用程序中调试一个极其缓慢的请求调用。我已设法根据自己的喜好优化 Controller 方法,Rails 的日志告诉我它已在 XX 毫秒内完成操作(Completed 200 OK in 5049ms (Views: 34.9ms | ActiveRecord: 76.3ms)
).但是,在加载页面时,在浏览器中实际呈现任何内容之前打印此消息很长;最多约 15 秒的等待时间。 Rack mini-profiler 证实了这一点,告诉我 GET 操作(不计算完成 Controller 操作所花费的时间)花费了 14 秒左右。 (分析器还确认 Controller 操作的执行时间约为 5 秒)。
我可以接受 Controller 操作花费 5 秒左右的时间,因为我可以对我的代码的各个部分进行基准测试,并清楚地看到什么是缓慢的以及为什么。对于为什么存在这种神秘的滞后时间,我完全感到困惑。它在做什么?
最佳答案
Assets
主要原因可能是 Assets 加载。你在开发环境吗?默认情况下 Assets 不预编译(我相信 Assets 缓存也关闭)
也许您没有看到关联的 GET 请求,因为您使用了 gem 'quiet-assets'。看到所有对 Assets (javascript/css) 的 GET 请求,我感到非常疲倦,以至于我将这个 gem 放在我的 Gemfile 中,然后忘记了一段时间。但之后还有很多事情要做。
服务 Assets 可以非常非常长。例如,我正在使用一些 jquery ui,一开始我在我的 application.js
中调用了 //require jquery.ui.all
。结果它实际上只为 jquery.ui 发送了几十个文件。即使文件很小并且服务速度非常快,连续的 GET 请求/回复之间也会有一些延迟,这是我在 localhost/development 中的应用程序响应时间过慢的原因
你不想在开发中预编译 Assets ,但你可以摆脱无用的(如果你正在使用 jquery,很可能你只需要几个文件,而不是全部)
在预编译 Assets 的测试/生产中,我的服务器响应时间快了 10 到 100 倍。
关于ruby-on-rails - Rails 在记录 200 OK 后在做什么? (调试响应时间慢),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27867276/