我正在尝试在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秒左右我很好,因为我可以对代码的各个部分进行基准测试,并清楚地看到什么是缓慢的以及为什么。尽管存在这种神秘的滞后时间,但我完全不知所措。它在做什么?
答案 0 :(得分:2)
<强>资产强>
主要原因可能是资产负荷。你在开发环境吗?默认情况下,资产没有预编译(我相信资产缓存也是关闭的)
也许您没有看到相关的GET请求,因为您使用了gem&#39; quiet-assets&#39;。我看到所有资产的GET请求(javascript / css),我把这个宝石放在我的Gemfile中并且忘记它已经有一段时间了。但后来仍有很多事情发生。
服务资产可能非常长。例如,我正在使用一些jquery ui,一开始我在//require jquery.ui.all
中调用了application.js
。事实证明它实际上只是为jquery.ui发送了几十个文件。即使文件很小并且服务速度很快,连续的GET请求/回复之间也会有一些延迟,这是我的应用程序在localhost / development中响应时间过慢的原因
你不想在开发中预编译资产,但是你可以摆脱无用的资源(如果你使用的是jquery,很可能你只需要一些文件,而不是全部)
我的服务器响应时间在预编译资产的测试/生产中快10到100倍。