ruby-on-rails - Rails 在记录 200 OK 后在做什么? (调试响应时间慢)

标签 ruby-on-rails ruby lag

我试图在我的 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/

相关文章:

sql - 滞后获得自前一个空值以来的第一个非空值

ruby-on-rails - 如何在 Capybara/Poltergeist 中测试 JavaScript 错误

mysql - 关于rails 3 validates_presence_of :的问题

ruby-on-rails - 带 rails 的 ionic 中的 CORS 问题

ruby - 如何在不在标准输出中显示的情况下捕获命令的输出

ruby - Linux 上还没有 apt-get install ruby​​1.9.2 吗?

ruby-on-rails - Rails ActiveRecord 的好的备忘单或红牌

ruby - 是否可以在 ruby​​ 方法中使用散列键作为第一级变量?

java - 在 Web 应用程序中卡住

sql - 如何在 PostgreSQL 中移动整个组?